我正在尝试发送一对三角形条,来自输入三角形,用于渲染
条由以下顶点索引定义:
strip 1: 0 14 16 15 1 23 30 41 8
条带2:31 7 17 18 16 0
14______15______23______41 7 ______18______0 / / / / / / / / / / / / / / 0-----16------1 ------30------8 31------17------16
这些条是从下列三角形的索引(依次来自一个任意网格)导出的。我使用一个正号来表示三角形与输入三角形在条带中具有相同的绕组。
1条输入三角形
0 14 16 +
14 15 16 -
1 16 15 +
1 15 23 -
1 23 30 +
41 30 23 -
8 30 41 +
2条输入三角形
7 17 31 +
7 18 17 -
16 17 18 +
0 16 18 -
如果这些三角形被渲染成三角形,我得到了预期的结果——一对三角形带,三角形的可见面都在同一侧(在这种情况下,可见面都指向观看者)。
如果我将条带单独渲染为三角形带,我将得到预期的结果-与绘制三角形获得的结果相同。
然而,如果我按照苹果的指导原则(通过复制第一个条带的最后一个顶点和第二个条带的第一个顶点)连接这些条带,则条带1是正确的,条带2是翻转的(即可见面反转)。
14______15______23______41 7 ______18______0 / / / / / / / / / / / / / / 0-----16------1 ------30------8----8----31----31------17------16
传递给渲染器的条带序列:0 14 16 15 1 23 30 41 8 8 31 31 7 17 18 16 0
最后,反转第二个条带并将新的序列条带传递给渲染器的琐屑实验没有什么不同-第二个条带仍然是翻转的。
我错过了什么?
您缺少的是"绕组顺序"。缠绕顺序决定三角形的朝向。顺时针三角形的方向与逆时针三角形的方向相反。
加工三角形条时,opengl对偶数三角形的缠绕顺序进行"翻转"。否则你会让其他的三角形都朝向错误的方向。
你的串联理论在实践中是失败的,因为你的第一个tri集合包含奇数个三角形。
在你的情况下,很容易补救。首先从第二个集合开始,因为它有偶数个顶点/三角形。
在一般情况下,我认为在添加第二组之前,您需要在第一个条带的末尾添加一个额外的冗余三角形,以使其具有偶数个三角形。