2013-02-12 12 views
2

我試圖使用一次調用glDrawElements()呈現一組線條。每條線都是一個四邊形,我使用中間的退化三角形將它們分開。glDrawElements三角形使用頂點數組的起點和終點呈現(使用GL_TRIANGLE_STRIP)

在呈現時,額外的三角形被使用在指數0n-1n-2頂點,我不相信是GL_TRIANGLE_STRIPS正常行爲繪製。

例如,具有12個頂點包含3個四邊形我的索引陣列看起來像這樣:

(0,1,2,3,,,4,5,6,7,,,8,9,10,11)

,其結果是這樣的:

Triangle rendered between first and last vertices

無論我嘗試渲染多少個頂點,或者將多少個索引放入索引列表中都沒有關係,它仍以一個三角形結尾加入起始&。我正在使用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); 


什麼愚蠢的事情我可不可以做會導致此行爲?

回答

2

count指定要呈現的元素的數量。

glDrawElements(GL_TRIANGLE_STRIP, indexCount, GL_UNSIGNED_SHORT, 0); 
+0

現貨,謝謝。 – Stuart 2013-02-12 22:12:39

+0

它是三角形的數量還是指數的數量?或者這些數字恰好相同的三角形帶? – mrplants 2015-04-29 06:53:23

+0

@mrplants我一直在問自己這個同樣的問題。前3個索引組成第一個三角形,然後每個後續索引組成另一個三角形。所以如果你有N個索引,但是我仍然不明白count是否應該是N或N-2,我猜N是最直接的答案,因爲N-2是模式不是緩衝區中數據的大小。儘管如此,我還沒有測試過。 – 2016-08-17 13:24:40

相關問題