OpenGL - BackCulling - 深度缓冲区值

标签 opengl depth-buffer

以下是同一 3D 场景的 2 张图像,来自同一视角(虚拟相机),有和没有 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

使用反向剔除

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 的情况下,对于某个像素,深度缓冲区的值是多少?是靠近相机的那个(平滑的图像看起来像这样),还是因为许多东西投影到相同的二维点/像素,所以我应该期待其他东西?

引用 - 3D 场景 - 2D 框架

enter image description here

enter image description here

最佳答案

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

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

关于OpenGL - BackCulling - 深度缓冲区值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17933713/

相关文章:

c++ - 没有累积缓冲区的 OpenGL 运动模糊

c++ - OpenGL - 阴影贴图/深度贴图给出奇怪的结果

c++ - 为什么我的一些立方体面没有按照我希望的方式呈现?

c++ - 附加 RBO 时 FBO 不完整

c++ - Cmake 找不到 QGLWidget

linux - 如果我仅使用 OpenGL ES 1.x 调用构建并链接 OpenGL 应用程序,它仍然可以工作吗?

c++ - 如何在obj文件中使用面值(opengl c++)

opengl - 如何使用深度缓冲区来存储索引

opengl - 如何使用 OpenGL 和 GLSL 手动填充深度缓冲区

opengl - 使用几何着色器分层渲染到 CUBEMAP