好的我知道如果顺序错误,顺序肯定会影响结构。 但是我有两组指数我认为渲染立方体是正确的。 当我使用其中一个时,立方体会正确渲染,但对于另一个则不是(检查图像)。
这是我正在使用的: 以下呈现正确
GLubyte cubeIndices[24]={0,3,2,1,2,3,7,6,0,4,7,3,1,2,6,5,4,5,6,7,0,1,5,4};
glDrawElements(GL_QUADS,24,GL_UNSIGNED_BYTE,&cubeIndices);
此内容无法正常呈现
GLubyte cubeIndices[24]={1,2,3,4,5,8,7,6,1,5,6,2,2,6,7,3,3,7,8,4 ,5,1,4,8};
glDrawElements(GL_QUADS,24,GL_UNSIGNED_BYTE,&cubeIndices);
我正在使用同一组顶点。谁能告诉我为什么不工作?
答案 0 :(得分:2)
虽然两个索引序列一见钟情看起来完全不同,但它们确实密切相关。主要区别在于第二个包含基于1的索引,而第一个包含基于0的索引。 OpenGL需要基于0的索引。
还有另一个不同之处。由四边形分组,第一个序列是:
0,3,2,1
2,3,7,6
0,4,7,3
1,2,6,5
4,5,6,7
0,1,5,4
第二个,在从每个值中减去1后,是:
0,1,2,3
4,7,6,5
0,4,5,1
1,5,6,2
2,6,7,3
4,0,3,7
四边形的顺序明显不同。现在重新排序第二个列表以使四边形的顺序相同,并将它们并排编写以进行比较:
0,3,2,1 0,1,2,3
2,3,7,6 2,6,7,3
0,4,7,3 4,0,3,7 --> 0,3,7,4
1,2,6,5 1,5,6,2
4,5,6,7 4,7,6,5
0,1,5,4 0,4,5,1
对于第3个四元组,我还循环移动了索引以便于比较。
不同之处在于,在比较两个索引序列时,所有四边形都具有完全相反的顺序。这在使用OpenGL渲染时很重要,因为它决定了四边形的缠绕顺序。特别是如果启用背面剔除,则需要确保从外部观察立方体时多边形的方向是逆时针方向。