2017-07-18 53 views
0

我正在跟隨來自Antonio Bejarano的LWJGL書的3D遊戲開發。我已經達到了能夠在屏幕上渲染四邊形的要求。在實現了頂點索引緩衝區之後,四邊形中只有一個三角形呈現在屏幕上,所以我認爲假設問題出現在代碼中是安全的。LWJGL頂點索引緩衝區導致「網格」的一半加載

 // Vertex Index Buffer 
     idxVboId = glGenBuffers(); 
     vertsIdxBuffer = MemoryUtil.memAllocInt(indices.length); 
     vertsIdxBuffer.put(indices).flip(); 
     glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,idxVboId); 
     glBufferData(GL_ELEMENT_ARRAY_BUFFER,vertsIdxBuffer,GL_STATIC_DRAW); 

爲頂點的代碼緩衝區和顏色緩衝區的作品,因爲我已刪除的引用索引緩衝區,並出現全四。我也改變了渲染的方法來說明新類型的顯示效果:因爲我一直在盯着這幾個小時

shaderProgram.bind(); 

     //bind to vao 
     glBindVertexArray(mesh.getVaoId()); 
     //enable positions buffer 
     glEnableVertexAttribArray(0); 
     //enable colour buffer 
     glEnableVertexAttribArray(1); 

     //draw verts 
     glDrawElements(GL_TRIANGLES, 
     mesh.getVertexCount(),GL_UNSIGNED_INT,0); 

     //restore state (?) 
     glDisableVertexAttribArray(0); 
     glDisableVertexAttribArray(1); 
     glBindVertexArray(0); 

     shaderProgram.unbind(); 

任何建議表示讚賞,並不能真正看到我犯的錯。

編輯:四網碼

 renderer.init(); 

    float[] positions = new float[]{ 
      -0.5f, 0.5f, 0.0f, 
      -0.5f, -0.5f, 0.0f, 
      0.5f, 0.5f, 0.0f, 
      0.5f, 0.5f, 0.0f, 
      -0.5f, -0.5f, 0.0f, 
      0.5f, -0.5f, 0.0f, 
    }; 

    float[] colours = new float[]{0.5f,0f,0f,0f,0.5f,0f,0f,0f,0.5f,0f,0.5f,0.5f}; 

    int[] indices = new int[]{ 
      0, 1, 3, 3, 1, 2, 
    }; 

    mesh = new BMesh(positions,colours,indices); 

2ND編輯 前後位置排列變化

Before

After

+0

可能是因爲* backface-culling *?您是否啓用了「GL_CULL_FACE」,並且您還設置了哪個約定? (請參閱https://www.khronos.org/opengl/wiki/Face_Culling)。此外,請顯示您在何處以及如何聲明四邊形網格數據。 – meowgoesthedog

+0

感謝您的回覆,我現在將着眼於剔除,我已經添加了形成四邊形網格的代碼 –

回答

0

通過四網格初始化代碼尋找後,似乎該錯誤歸因於頂點3和0123第二個四邊形上的是相同的頂點,即兩者都在(0.5, 0.5, 0.0)。也許你錯誤地複製了陣列中的第4個和第5個頂點?

即也許你的意思是有

float[] positions = new float[]{ 
     -0.5f, 0.5f, 0.0f, 
     -0.5f, -0.5f, 0.0f, 
     0.5f, 0.5f, 0.0f, 
     0.5f, -0.5f, 0.0f 
}; 

編輯:你似乎指數是錯誤的。將它們更改爲{ 0, 1, 3, 0, 3, 2 }

+0

我附上了兩張照片,向您展示了您所提議的修改已取得的成果。現在似乎有兩個單獨的三角形,但它們不再排隊,我認爲這可能與索引緩衝區中的值不匹配新位置數組有關。 –

+0

@LiamDevlin是的,因爲你的指數是錯的。我會更新答案 – meowgoesthedog

+0

非常感謝您的幫助,解決了這個問題。故事的道德:檢查你的座標:D –