我正在跟隨來自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編輯 前後位置排列變化
可能是因爲* backface-culling *?您是否啓用了「GL_CULL_FACE」,並且您還設置了哪個約定? (請參閱https://www.khronos.org/opengl/wiki/Face_Culling)。此外,請顯示您在何處以及如何聲明四邊形網格數據。 – meowgoesthedog
感謝您的回覆,我現在將着眼於剔除,我已經添加了形成四邊形網格的代碼 –