2010-11-11 60 views

回答

2

有在減少三角形/四帶的頂點沒有什麼好處。讓每個人臉具有自己的頂點(對於像立方體這樣的銳邊網格)的一個優點是指定與每個頂點不同的法線的能力,如果想要具有正確的每像素點可能對您很重要採用鏡面反射照明。 (不管怎麼說,如果你不關心法線或任何東西:就純粹的效率而言,最好的做法是隻指定8個頂點並使用一個索引數組,這樣就可以使用頂點緩存,因此頂點緩存每個頂點着色器可能只運行一次,即使它被多個面使用)。

3

我能得到它低至17如果我理解正確的話

1: -1, 1, 1 
2: 1, 1, 1 
3: -1, -1, 1 
4: 1, -1, 1 
5: -1, -1, -1 
6: 1, -1, -1 
7: -1, 1, -1 
8: 1, 1, -1 
9: -1, 1, 1 
10: 1, 1, 1 
11: 1, -1, 1 
12: 1, 1, -1 
13: 1, -1, -1 
14: -1, -1, -1 
15: -1, 1, -1 
16: -1, -1, 1 
17: -1, 1, 1 
+0

這實現了正確的影響,但我認爲應該能夠用更少的頂點做到這一點。你認爲這有可能嗎?否則,它看起來像是一些三角形重疊,這會產生一些僞像:( – 2010-11-11 19:45:07

2

它需要14個頂點,前3個做一個三角形,然後每個額外的三角形使用一個額外的頂點(2 + num_triangles)。這是我怎麼做的:

v = ((-w, -h, d), # front-bottom-left  0 
    (w, -h, d), # front-bottom-right 1 
    (-w, h, d), # front-top-left  2 
    (w, h, d), # front-top-right  3 
    (-w, -h, -d), # back-bottom-left  4 
    (w, -h, -d), # back-bottom-right  5 
    (-w, h, -d), # back-top-left   6 
    (w, h, -d)) # back-top-right  7 


strip_vertices = (v[7] + v[6] + v[3] + v[2] + v[0] + v[6] + v[4] + 
        v[7] + v[5] + v[3] + v[1] + v[0] + v[5] + v[4]) 

如前所述,這會導致問題與法線,所以我想我會在非帶格式重寫此。

+0

當我使用CullMode.CullCounterClockwiseFace時,立方體會反轉,如何將立方體反轉爲正確的方式? – shinzou 2017-01-22 12:09:19

+0

使用CullClockwiseFace,或通過更改頂點順序(也許只是反轉列表),以便它們按順時針方向繪製。請注意,OpenGL默認爲正面的逆時針方向,因此我選擇以逆時針順序繪製它們。 – 2017-01-23 10:43:39