2
我試圖使用一次調用glDrawElements()
呈現一組線條。每條線都是一個四邊形,我使用中間的退化三角形將它們分開。glDrawElements三角形使用頂點數組的起點和終點呈現(使用GL_TRIANGLE_STRIP)
在呈現時,額外的三角形被使用在指數0
,n-1
和n-2
頂點,我不相信是GL_TRIANGLE_STRIPS
正常行爲繪製。
例如,具有12個頂點包含3個四邊形我的索引陣列看起來像這樣:
(0,1,2,3,,,4,5,6,7,,,8,9,10,11)
,其結果是這樣的:
無論我嘗試渲染多少個頂點,或者將多少個索引放入索引列表中都沒有關係,它仍以一個三角形結尾加入起始&。我正在使用VBO和IBO進行繪圖,並將其包裝在VAO中。所以畫我只需撥打:
glBindVertexArrayOES(vao);
glDrawElements(GL_TRIANGLE_STRIP, indexCount * sizeof(GLushort), GL_UNSIGNED_SHORT, 0);
glBindVertexArrayOES(0);
VAO設置:
// Bind VAO.
glBindVertexArrayOES(vao);
// Bind and set VBO data.
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, vertexCount * sizeof(VertexStructure), vertices, GL_STATIC_DRAW);
// Enable attribute pointers.
glVertexAttribPointer(position, 2, GL_FLOAT, GL_FALSE, sizeof(VertexStructure), (void*)offsetof(VertexStructure, vertex));
glEnableVertexAttribArray(position);
glVertexAttribPointer(color, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(VertexStructure), (void*)offsetof(VertexStructure, color));
glEnableVertexAttribArray(color);
// Bind and set IBO data.
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indexCount * sizeof(GLushort), indices, GL_STATIC_DRAW);
// Unbind VBO & VAO.
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArrayOES(0);
// Disable attribute pointers.
glDisableVertexAttribArray(position);
glDisableVertexAttribArray(color);
什麼愚蠢的事情我可不可以做會導致此行爲?
現貨,謝謝。 – Stuart 2013-02-12 22:12:39
它是三角形的數量還是指數的數量?或者這些數字恰好相同的三角形帶? – mrplants 2015-04-29 06:53:23
@mrplants我一直在問自己這個同樣的問題。前3個索引組成第一個三角形,然後每個後續索引組成另一個三角形。所以如果你有N個索引,但是我仍然不明白count是否應該是N或N-2,我猜N是最直接的答案,因爲N-2是模式不是緩衝區中數據的大小。儘管如此,我還沒有測試過。 – 2016-08-17 13:24:40