OpenGL - BackCulling - 深度缓冲值

时间:2013-07-29 20:36:00

标签: opengl depth-buffer

以下是相同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);

enter image description here

使用BackCulling

glEnable(GL_CULL_FACE);
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
glDepthFunc(GL_LESS);

enter image description here

问题

  1. 为什么两张图片之间有这样的差异?当然,人们会期待差异,但我不明白为什么没有BackCulling 深度图是如此平滑,而使用BackCulling 深度值似乎不那么连续
  2. 没有BackCulling 的情况下,对于某个像素,深度缓冲区的值是多少?它是靠近相机的那个(平滑的图像看起来像这样),或者因为很多东西投射到相同的2d点/像素我应该期待别的吗?
  3. 参考 - 3D场景 - 2D帧

    enter image description here

    enter image description here

1 个答案:

答案 0 :(得分:4)

他们之间存在差异,因为你正在剔除错误的面孔。您的网格数据是明确定向的,因此正面与OpenGL的默认值不同。 OpenGL默认为逆时针方向为正面。您的网格数据将顺时针面放在前面(或者您在某个时刻反转网格)。

因此,代替重新排列顶点数据,请使用the aptly named glFrontFace(GL_CW)更改正面。