【问题标题】:OpenGL - BackCulling - Depth Buffer ValuesOpenGL - BackCulling - 深度缓冲区值
【发布时间】:2013-07-29 20:36:00
【问题描述】:

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

问题

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

参考 - 3D 场景 - 2D 帧

【问题讨论】:

    标签: opengl depth-buffer


    【解决方案1】:

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

    因此,不要重新排列顶点数据,而是使用 the aptly named glFrontFace(GL_CW) 更改正面。

    【讨论】:

    • 确实@NicolBolas,通过检查网格,后表面顶点具有相似的深度(与前表面顶点相反),但我没有想到你的建议。非常感谢,它有效!刚刚在我上面提到的代码行上方添加了您建议的命令:)
    • 另外请注意,您也可以使用 glCullFace。无论您剔除正面还是背面(或两者),这都会改变。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多