gpt4 book ai didi

c++ - 为什么 GL_LEQUAL 推荐用于 GL 深度函数(为什么它对我不起作用)?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:52:49 24 4
gpt4 key购买 nike

关于 GL wiki他们建议使用 GL_LEQUAL 作为深度函数。此外,深度函数默认为 GL_LESS。当我使用这些功能中的任何一个时,我都会得到奇怪的结果。在这张图片中,红色方 block 应该在蓝色方 block 的前面(两个方 block 的大小相同): with GL_LESS

但是,如果我使用 glClearDepth(0.0) 然后使用 glDepthFunc(GL_GREATER),运行其他未更改的程序,我得到这个: with GL_GREATER

仔细考虑一下,GL_LESS 会给出它所做的结果是有道理的:如果传入的深度值小于存储的深度值,则写入片段。

如果我将相机定位在 (1, 0, 0) 并朝 (0, 0, 0) 方向看,我希望在 (0.5 , 0, 0) 位于 (0, 0, 0) 处的对象前面。使用 GL_LESS 时,(0, 0, 0) 处的对象不是写入片段的对象吗?

编辑:Nicol,感谢您提及投影矩阵。似乎设置不正确。我在 arcsynthesis.org 上关注了您的教程一段时间,并根据我自己的项目调整了代码,但我偏离了您的投影矩阵并使用了 glFrustum 手册页中描述的数学来实现我自己的该函数版本,然后使用了 NeHe 的 gluPerspective替换以替换 gluPerspective。我不知道为什么替换不起作用,因为我的矩阵数学是正确的(我已经根据各种在线计算器对其进行了检查)。使用您的矩阵,我得到了 GL_LESS 的正确结果。

最佳答案

Why is GL_LEQUAL recommended for the GL depth function

着色器。多 channel alphablended 闪电(可能带有凹凸贴图)。为此,您必须在相同的位置/深度上多次绘制相同的对象,但使用不同的着色器/混合参数并且应该启用深度测试(深度写入可以在第一次之后禁用)。 GL_LESS 将剪掉第 2 遍和之后的每一遍。 GL_LEQUAL 不会,光照会正常工作。

GL_LEQUAL 本身不会引起 z-fighting,z-fighting 发生在你有两个几乎平行的多边形共享几乎相同的位置时。可以通过增加深度缓冲精度来减少影响。在过去,它也可以通过使用 w-buffer 来减少(至少在 DirectX 中),但据我所知,此功能不再流行。

In this picture the red square should be in front of the blue one (both squares are the same size):

没有源代码无法正确回答。

关于c++ - 为什么 GL_LEQUAL 推荐用于 GL 深度函数(为什么它对我不起作用)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9057401/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com