在GL wiki上,他们建议使用 GL_LEQUAL 作为深度函数。此外,深度函数默认为 GL_LESS。当我使用这些功能中的任何一个时,我都会得到奇怪的结果。在这张图片中,红色方块应该在蓝色方块的前面(两个方块大小相同):
但是,如果我使用glClearDepth(0.0)
and then glDepthFunc(GL_GREATER)
,运行其他未更改的程序,我会得到:
再想一想,GL_LESS 会给出它所做的结果是有道理的:如果传入的深度值小于存储的深度值,则写入片段。
如果我将相机定位在(1, 0, 0)
并看向(0, 0, 0)
我希望一个对象位于(0.5, 0, 0)
的一个对象前面(0, 0, 0)
。使用 GL_LESS 的对象不会(0, 0, 0)
是其片段被写入的对象吗?
编辑:尼科尔,感谢您提到投影矩阵。好像设置不正确。我在 arcsynthesis.org 上关注了你的教程一段时间,并将代码调整到我自己的项目中,但我偏离了你的投影矩阵,并使用 glFrustum 手册页上描述的数学来实现我自己的该函数版本,然后使用 NeHe 的 gluPerspective替换以替换 gluPerspective。我不知道为什么替换不起作用,因为我的矩阵数学是正确的(我已经对照各种在线计算器进行了检查)。使用您的矩阵,我使用 GL_LESS 得到了正确的结果。