1

我正在尝试发送一对从输入三角形派生的三角形带进行渲染

条带由以下顶点索引定义:

带 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 -

如果这些三角形被渲染为三角形,我会得到预期的结果 - 一对三角形条带,三角形的可见面都在同一侧(在这种情况下,可见面指向观察者)。

如果我将条带单独渲染为三角形条带,我会得到预期的结果 - 与通过绘制三角形获得的结果相同。

但是,如果我按照苹果指南连接这些条带(通过复制第一个条带的最后一个顶点和第二个条带的第一个顶点),则条带被正确绘制,条带 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

最后,颠倒第二个片段并将新序列片段传递给渲染器的简单实验没有任何区别——第二个片段仍然被翻转。

我错过了什么?

4

1 回答 1

1

您缺少的是“清盘顺序”。缠绕顺序决定了三角形的朝向。顺时针三角形的方向与逆时针三角形相反。

处理三角形条时,opengl“翻转”偶数三角形的缠绕顺序。否则你会让其他所有三角形都朝向错误的方向。

您的串联理论在实践中失败了,因为您的第一组 tri 包含奇数个三角形。

在你的情况下,它很容易补救。首先从第二组开始,因为它有偶数个顶点/三角形。

在一般情况下,我认为您需要在第一条带的末尾添加一个额外的冗余三角形,以便在添加第二组之前给它偶数个三角形。

于 2013-06-04T03:35:31.047 回答