2

这是同一 3D 场景的 2 张图像,来自相同的视点(虚拟相机),带有和不带有 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);

在此处输入图像描述

问题

  1. 为什么两张图片之间会有这样的差异?当然,人们会期待差异,但我不明白为什么没有 BackCulling深度图如此平滑,而使用 BackCulling深度值似乎不那么连续。
  2. 没有 BackCulling的情况下,对于某个像素,深度缓冲区的值是多少?是离相机更近的那个(平滑的图像看起来像这样),还是因为很多东西都投射到同一个二维点/像素上,所以我应该期待别的东西?

参考 - 3D 场景 - 2D 帧

在此处输入图像描述

在此处输入图像描述

4

1 回答 1

4

它们是不同的,因为你剔除了错误的面孔。您的网格数据具有明确的方向,因此正面与 OpenGL 的默认值不同。OpenGL 默认逆时针在前。您的网格数据将顺时针方向放在前面(或者您在某个点反转网格)。

因此,不要重新排列顶点数据,而是使用恰当命名的glFrontFace(GL_CW).

于 2013-07-29T20:45:31.547 回答