以下是同一 3D 场景的 2 张图像,来自同一视角(虚拟相机),有和没有 backCulling。图像并不描绘最终的网格,而是描绘深度缓冲区的内容。
不进行回剔
glDisable(GL_CULL_FACE);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
glDepthFunc(GL_LESS);
使用反向剔除
glEnable(GL_CULL_FACE);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
glDepthFunc(GL_LESS);
问题
- 为什么两张图片之间有如此大的差异?当然,人们会期望有所不同,但我不明白为什么没有 BackCulling 深度图如此平滑,而有 BackCulling 深度值似乎不那么连续.
- 在没有 BackCulling 的情况下,对于某个像素,深度缓冲区的值是多少?是靠近相机的那个(平滑的图像看起来像这样),还是因为许多东西投影到相同的二维点/像素,所以我应该期待其他东西?
引用 - 3D 场景 - 2D 框架
最佳答案
它们之所以不同是因为你挑选了错误的面孔。您的网格数据的方向明确,因此正面与 OpenGL 的默认值不同。 OpenGL默认逆时针在前。您的网格数据将顺时针方向的面置于前面(或者您在某个时刻反转网格)。
因此,不要重新排列顶点数据,而是使用 the aptly named glFrontFace(GL_CW)
更改正面。 .
关于OpenGL - BackCulling - 深度缓冲区值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17933713/