18

在 OpenGL 中,我展示了一个简单的模型。当我启用深度缓冲区时,

glEnable(GL_CULL_FACE);
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);

一切都消失了。我阅读了这个OpenGL 常见问题解答,但它对我没有帮助。

我的透视设置是:angle=45deg, near=1, far=40, 我把模型放在(0,0,0), 我把眼睛放在(0,0,4). 没有 Z 缓冲区,我可以看到模型。

有什么问题?

4

3 回答 3

56

你确定你清除了深度缓冲区吗?

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
                              ^^^^^^^^^^^^^^^^^^^
于 2012-04-06T12:03:52.980 回答
6

如果其他答案不起作用,请尝试评论中提到的user886079

如果上述方法不起作用,请在 gluPerspective、glFrustum 或 glOrtho 函数中检查您的近平面。如果设置为 0,深度缓冲似乎不起作用。

我几乎尝试了所有方法,但无法解决重叠问题。我已经把接近值 0.0f。我将其更改为 0.01f,现在的结果就是它需要的样子。

于 2016-11-26T08:39:51.083 回答
1

如果上述以下答案不起作用,请尝试以下操作:

  • 如果您GL_CULL_FACE启用了检查模型顶点的缠绕顺序。(LH)(RH)
  • 如果GL_DEPTH_TEST启用;然后根据模型视图投影矩阵以及相机的位置和视图方向检查平截头体的平面。
  • 如果GL_BLEND启用;检查对象的渲染顺序与z-buffer.
于 2018-03-08T00:26:34.090 回答