我正在尝试发送一对从输入三角形派生的三角形条带,用于渲染
条带由以下顶点索引定义:
strip 1:0 14 16 15 1 23 30 41 8
strip 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
最后,通过反转第二个条带并将新的序列条带传递到渲染器的简单实验没有任何区别 - 第二个条带仍然被翻转。
我错过了什么?
答案 0 :(得分:1)
你缺少的是“缠绕顺序”。绕线顺序决定三角形面向哪个方向。顺时针三角形面向CounterClockwise三角形的相反方向。
当处理三角形条带时,opengl“翻转”偶数三角形的缠绕顺序。否则你会得到所有其他三角形朝向错误的方向。
你的连接理论在实践中失败了,因为你的第一组三元组包含奇数个三角形。
在您的情况下,它很容易纠正。首先从第二个集开始,因为它有偶数个顶点/三角形。
在一般情况下,我认为您需要在第一个条带的末尾添加一个额外的冗余三角形,以便在添加第二个集合之前为其提供偶数个三角形。