2017-04-25 62 views
1

我想繪製一個字符串在OpenGL與LWJGL從包含所有字符旁邊另一個紋理地圖集。Quad繪圖與GL_TRIANGLE_STRIP

現在,我增加了對每個字符三個頂點的網格,這將是由

GL11.glDrawArrays(GL11.GL_TRIANGLE_STRIP, 0, text.getModel().getRawModel().getVertexCount()); 

比如我tyring呈現字符串「托馬斯」被渲染,爲此氏達作爲以下(添加偏移,看問題越好):

Render of Thomas

正如你可以看到,有一個奇怪的「Quad」,每個字符之間,我不知道爲什麼:-( 我想我將添加到許多頂點每個字符,但我還是不知道做的更好......

頂點(2D):

-0.3333333, 0.5875, 
-0.24800003, 0.5875, 
-0.3333333, 0.25, 
-0.24800003, 0.25, 

-0.11466664, 0.5875, 
-0.029333353, 0.5875, 
-0.11466664, 0.25, 
-0.029333353, 0.25, 

0.10399997, 0.5875, 
0.18933332, 0.5875, 
0.10399997, 0.25, 
0.18933332, 0.25, 

0.32266665, 0.5875, 
0.408, 0.5875, 
0.32266665, 0.25, 
0.408, 0.25, 

0.5413333, 0.5875, 
0.62666667, 0.5875, 
0.5413333, 0.25, 
0.62666667, 0.25, 

0.76, 0.5875, 
0.84533334, 0.5875, 
0.76, 0.25, 
0.84533334, 0.25, 

紋理COORDS(2D):

0.23318386, 1.0, 
0.23766816, 1.0, 
0.23318386, 0.0, 
0.23766816, 0.0, 

0.32286996, 1.0, 
0.32735425, 1.0, 
0.32286996, 0.0, 
0.32735425, 0.0, 

0.3542601, 1.0, 
0.35874438, 1.0, 
0.3542601, 0.0, 
0.35874438, 0.0, 

0.34529147, 1.0, 
0.3497758, 1.0, 
0.34529147, 0.0, 
0.3497758, 0.0, 

0.29147983, 1.0, 
0.29596412, 1.0, 
0.29147983, 0.0, 
0.29596412, 0.0, 

0.3721973, 1.0, 
0.37668163, 1.0, 
0.3721973, 0.0, 
0.37668163, 0.0 
+0

什麼是指數數組? – rwols

+0

@rwols沒有索引數組,因爲我認爲我不會使用任何頂點兩次。只有頂點和紋理座標存儲在VAO中。 –

+0

然後'GL_TRIANGLE_STRIP'可能不會起作用 – rwols

回答

1

看着你如何佈局你的頂點,它看起來像GL_TRIANGLE_STRIP不會工作。讓我們來標記你的頂點與數字0到24的三角形帶拓撲將繪製三角形就像這樣:

draw triangle 0 1 2 
draw triangle 1 2 3 
draw triangle 2 3 4 
... 
draw triangle 20 21 22 
draw triangle 21 22 23 

你可能想要的是這樣的:

draw triangle 0 1 2 
draw triangle 1 2 3 

draw triangle 4 5 6 
draw triangle 5 6 7 

draw triangle 8 9 10 
draw triangle 9 10 11 

... 
... 

draw triangle 20 21 22 
draw triangle 21 22 23 

這可以用GL_TRIANGLES拓撲結構來實現並使用索引緩衝區這樣的:

[ 0 1 2 1 2 3 4 5 6 5 6 7 ... 20 21 22 21 22 23 ] 
+1

非常感謝!而已 :-) –

0

如果你想呈現不相交primatives與TRIANGLE_STRIP,你需要包括退化(零面積)三角形之間的不相交的prim。您可以通過重複你想不相交的頂點做到這一點:

-0.3333333, 0.5875, 
-0.24800003, 0.5875, 
-0.3333333, 0.25, // real triangle 
-0.24800003, 0.25, // real triangle 
-0.24800003, 0.25, // ignored degenerate triangle 

-0.11466664, 0.5875, // ignored degenerate triangle 
-0.11466664, 0.5875, // ignored degenerate triangle 
-0.029333353, 0.5875, // ignored degenerate triangle 
-0.11466664, 0.25, // real triangle 
-0.029333353, 0.25, // real triangle 
-0.029333353, 0.25, // ignored degenerate triangle 
... 

Degenrate prims會被優化掉不夠好,你可以忽略它們。

但是請注意,對於渲染不相交的四邊形基本上沒有優勢,因爲只需使用TRIANGLES就可以保存兩個頂點,而不管四邊形的數量是多少。

當不相交的'跳轉'不太常見時,如三條優化的網格,這種技術更有用。