2011-10-31 41 views
1

我想使用TRIANGLE_STRIP來呈現全屏對齊的網格。它由9個頂點和8個三角形,而應該是這個樣子:在OpenGL ES 2.0中使用三角形條帶時遇到的問題

A----B----C 
| 1 /| 3 /| 
|/|/| 
|/|/| 
|/ 2 |/ 4 | 
D----E----F 
| 5 /| 7 /| 
|/|/| 
|/|/| 
|/ 6 |/ 8 | 
G----H----I 

頂點A的座標爲(-1,-1,0),而頂點I是(1,1,0)。有人可能會說,這包括9個頂點,分別位於3列和3行。

我正在嘗試使用TRIANGLE_STRIP模式來執行此操作。是

,我提供給glDrawElements的指標如下:

AD BE CF F 
DG EH FI I 

CFF實際上應該產生退化的三角形,這樣人們可以跳到下一行。

我遇到的麻煩是計算提供給glDrawElements的正確數字。我正在做這樣的:

glDrawElements(GL_TRIANGLE_STRIPS, number_of_elelments, 
    GLES20.GL_UNSIGNED_SHORT, buffer); 

首先,我雖然它應該是可見的三角形數量:

number_of_elements = 2 * (cols - 1) * (rows - 1); // 8 

,但它是渲染一半的矩形。

然後我想起退化矩形,並決定將他們也:

number_of_elements = 2 * (cols - 1) * (rows - 1) + rows; // 10 

它變得更加矩形,但仍然不是全部。

然後我通過反覆試驗來猜測number_of_elements應該是什麼,我可以看到所有的矩形,所以我認爲這與其餘的設置沒有問題。

任何想法我做錯了什麼?

+1

看來我應該提供了*頂點*的數量,而不是*三角形*。有人確認這一點?在OpenGL規範中,他們說*元素的數量*,並且由於元素是三角形,所以我認爲它是三角形的,但看起來我錯了。 –

回答

1

首先,你的評論是正確的,你必須提供指數的數量,而不是三角形。爲了澄清術語,一個元素不是一個三角形,也不是一個頂點,它是一個索引(或索引引用的頂點)。

此外,您的繪圖順序已損壞,無論如何。你不僅需要重複F,而且還要D(引入4而不是2個退化三角形),否則你將得到一個頂點爲F,D和G(你不想要)的三角形。但另一方面,你不需要重複我(如果你沒有另一行)。所以,你的渲染順序是這樣的:

AD BE CF F 
D DG EH FI 

但要找出如何的Automize這取決於行數和列數的循環是你現在的任務。

+0

你確定我需要重複D嗎?因爲我在輸出中似乎沒有看到任何不正確的東西...... –

+0

@Albus當您不繪製紋理或任何照明,但只有平坦的彩色面孔時,可能是錯誤的FDG(或DFG,不知道)三角形只是呈現在正確的三角形上。但是這是錯誤的,至少當你使紋理,燈光或其他任何東西能夠提供比單一平面顏色更多的結構時。 –

+0

是的,我紋理的三角形。我會多看看它。如果聲音無知,三角帶對我來說是一個新的主題。 –

相關問題