簡體   English   中英

OpengGL glDrawElements繪制線條,但不繪制三角形

[英]OpengGL glDrawElements draws lines but not triangles

我有以下代碼:

for(auto m:shapes) {
    glVertexPointer(3, GL_DOUBLE, 0, m->verts);

    glNormalPointer(GL_DOUBLE, 0, m->normals);

    glDrawElements(GL_TRIANGLES, m->num_triangles*3, GL_UNSIGNED_INT, m->indices);
}

(在圖片中,圓圈和關鍵點無關緊要,它們是由其他代碼繪制的。抱歉,我無法發布圖片,我是新用戶...)

http://dl.dropbox.com/u/5269/Screen%20shot%202011-12-10%20at%2012.38.28%20PM.png

似乎什么也沒畫。

如果我將GL_TRIANGLES更改為GL_LINES:

for(auto m:shapes) {
    glVertexPointer(3, GL_DOUBLE, 0, m->verts);

    glNormalPointer(GL_DOUBLE, 0, m->normals);

    glDrawElements(GL_TRIANGLES, m->num_triangles*3, GL_UNSIGNED_INT, m->indices);
}

http://dl.dropbox.com/u/5269/Screen%20shot%202011-12-10%20at%2012.44.56%20PM.png

因此,似乎在文本緩沖區中坐標是有效的,索引緩沖區也可以。 glGetError返回0。最奇怪的是,相同的代碼適用於由相同源生成的其他頂點緩沖區。

有任何想法嗎?

您是否對兩個示例都使用了完全相同的m->索引 (順便說一下,它們也與Brett Hale指出的一樣,因為您可能沒有更改第二個示例中的枚舉常量)?

GL_LINES期望成對的流,其中GL_TRIANGLES期望成對的三胞胎。 我不知道您是如何填充m-> indices的 ,但是如果您執行了以下操作:

0 1 1 2 2 3 3 4 4 5 5 6 ...

您可能會遇到相同的問題。 當您將流解釋為成對構成時,您可能會看到所有分段:

01   12   23   34   45   56 ...

但是,當您將它們解釋為三元組時,會得到三角形,使得兩個頂點重合,因此它們是退化的,因此不會繪制。

011   223   344   556 ...

對於兩個調用,您也不太可能成功使用相同的表達式m-> num_triangles * 3 也許這是帖子中的另一個問題,您確實在代碼中進行了更改。 看看glBegin手冊頁

嘗試在for循環之前將多邊形模式設置為GL_LINE(glPolygonMode)。 如果您看到線條,則可能是2D繪圖的投影矩陣所引起的。 另外,您在第二張圖片中顯示的行是否正確? 在我看來是隨機的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM