首页 > 解决方案 > glCullFace 工作不正常,你有答案吗?

问题描述

我正在渲染一个地形,因为底面永远不会被看到,我虽然面部剔除会带来很好的性能提升。我查阅了一个教程并来到了这些设置:

glCullFace(GL_FRONT);
glFrontFace(GL_CCW);

问题是,这只是部分工作。地形由四边形组成,每个四边形由两个直角三角形组成,我只看到两个三角形中的一个,如果我使用顺时针缠绕,我会看到另一个三角形。我正在使用索引来安全记忆,并且我已经在纸上绘制了索引的绕组应该如何,但不知何故它不起作用。

我生成这样的索引:

mapIndices[arrayIdx + 0] = i;
mapIndices[arrayIdx + 1] = i + 1;
mapIndices[arrayIdx + 2] = i + CHUNK_SIDE_LENGHT + 1;

mapIndices[arrayIdx + 5] = mapIndices[arrayIdx + 1];
mapIndices[arrayIdx + 4] = mapIndices[arrayIdx + 2];
mapIndices[arrayIdx + 3] = mapIndices[arrayIdx + 2] + 1;

不要混淆CHUNK_SIDE_LENGHT + 1,我想要CHUNK_SIDE_LENGHT三角形,所以我需要CHUNK_SIDE_LENGHT + 1一行的顶点。正如我所说,我已经在纸上绘制了这个顺序并且缠绕是正确的,但 OpenGL 不喜欢它。这可能与索引渲染有关吗?

标签: c++opengl

解决方案


我在您的代码中看不到任何问题。

第一个三角形的缠绕顺序相同

0 : i
1 : i + 1
2 : i + CHUNK_SIDE_LENGHT + 1

2
 +
 | \
 |   \
 |     \         
 +-------+
0         1

作为第二个三角形的缠绕顺序:

3 : i + CHUNK_SIDE_LENGHT + 2
4 : i + CHUNK_SIDE_LENGHT + 1
5 : i + 1

4         3
 +-------+
   \     | 
     \   |
       \ |
         +
          5

推荐阅读