三角形条带和退化三角形

时间:2013-09-10 09:46:05

标签: opengl gl-triangle-strip

我的问题可能很愚蠢,但我没有找到三角带利用的好例子:

http://i.stack.imgur.com/KL8jk.png

使用这样的顶点:

A: -0.5f, -0.5f,  // Bottom left.
B: -0.5f,  0.5f,  // Top left.
C:  0.5f, -0.5f,  // Bottom Right.
D:  0.5f,  0.5f   // Top right.
----------------------------------
B--D
|\ |
| \|    
A--C    

有时,在示例中,我们可以找到此配置:

  • A,B,C,C,B,D

或者这个:

  • A,B,C,D

什么是对的?我已经尝试过这两种方法都有效。

现在我想使用退化三角形合并两个方格。

B--D    F--H    
|\ |    |\ |    
| \|    | \|    
A--C    E--G    

这就是我所拥有的:

ABCD + DEEF + EFGH

但又来了,有时我会收到一些文物。

2 个答案:

答案 0 :(得分:4)

我个人认为在一个三角形条中单独编写补丁会使代码易于编写或易于理解。如果您无法衡量性能差异,我建议使用解决方案A或B.

解决方案A:发送两个单独的三角条绘制命令

drawElements(TRIANGLE_STRIP, [A, B, C, D]);
drawElements(TRIANGLE_STRIP, [E, F, G, H]);

解决方案B:使用两个单独的修补程序发送一个GL_TRIANGLES命令

drawElements(TRIANGLES, [A, B, C, 
                         C, B, D,
                         E, F, G,
                         G, F, H]);

解决方案C:您要求的Triangle Strip解决方案

drawElements(TRIANGLE_STRIP, [A, B, C, D, 
                              D, E,
                              E, F, G, H]);

解决方案C绘制三角形

.A B C
 C B D
.C D D - deg
 D D E - deg
.D E E - deg
 E E F - deg
.E F G
 G F H

答案 1 :(得分:4)

如果使用背面剔除,则两种配置不会产生相同的结果。在ABCD情况下,BCD是逆时针方向,而在ABCCBD情况下,CBD是逆时针方向。绘制两个四边形的正确方法取决于您是否关心方向。我建议ABCDDEEFGH。