c++ - 索引的顺序影响 OPENGL 中的立方体结构

标签 c++ opengl rendering vertices

好的,我知道如果顺序错误,顺序肯定会影响结构。 但是我有两组索引,我认为它们对渲染立方体是正确的。 当我使用其中一组时,立方体被正确渲染,但对于另一组则不是(检查图像)。

Correct rendering Incorrect rendering

这是我正在使用的: 以下正确呈现

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);

我正在为两者使用相同的一组顶点。谁能告诉我为什么不起作用???

最佳答案

虽然这两个索引序列乍一看完全不同,但它们确实密切相关。主要区别在于第二个包含从 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

对于第三个四边形,我还循环移动了索引以便于比较。

不同之处在于,在比较两个索引序列时,所有四边形的顺序完全相反。这在使用 OpenGL 渲染它们时可能很重要,因为它决定了四边形的缠绕顺序。特别是如果您启用背面剔除,您需要确保从外面看立方体时多边形的方向是逆时针方向。

关于c++ - 索引的顺序影响 OPENGL 中的立方体结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24592446/

相关文章:

c++ - Qt C++ 双因素认证

c++ - Boost echo 服务器示例并在 lambda 中捕获 this 和 shared_from_this()

java - 使用 Java 预览 LaTeX 输出

rest - 在网页中呈现 ActivePivot

C++构造函数调用

c++ - 如何在 Windows 上编写模块?

c++ - 将vec3与模型矩阵相乘的问题(缩放问题)

c++ - OpenGL 轴出现不同

java - 将缓冲区绑定(bind)到多个目标

android - OpenGL ES 2.0 上的抗锯齿