6

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

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

但在这里,我有时会得到一些文物。

4

2 回答 2

4

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

于 2013-09-10T20:32:30.333 回答
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:您要求的三角带解决方案

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
于 2013-09-10T10:29:14.823 回答