以下是相同3D场景的2幅图像,从相同的角度(虚拟相机),有和没有backCulling。图像不描绘最终网格,而是描绘深度缓冲区的内容。
没有BackCulling
glDisable(GL_CULL_FACE);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
glDepthFunc(GL_LESS);
使用BackCulling
glEnable(GL_CULL_FACE);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
glDepthFunc(GL_LESS);
问题
参考 - 3D场景 - 2D帧
答案 0 :(得分:4)
他们之间存在差异,因为你正在剔除错误的面孔。您的网格数据是明确定向的,因此正面与OpenGL的默认值不同。 OpenGL默认为逆时针方向为正面。您的网格数据将顺时针面放在前面(或者您在某个时刻反转网格)。
因此,代替重新排列顶点数据,请使用the aptly named glFrontFace(GL_CW)
更改正面。