为什么我的OpenGL场景存在深度缓冲问题?

6
我正在读取一个高度图文件,并使用三角带进行渲染。
高度地图如下:
它看起来很好,像这样:
但只有从这个方向看起来正常。如果我稍微转动一下相机,就会出现这种情况:
似乎我的深度缓冲区已经损坏。我启用了它,并且它在其他几何体上运作正常。
有人遇到过这样的问题吗?我甚至不知道该搜索什么。谢谢!
编辑:
我的投影矩阵设置如下:
_fieldOfView(50.0f),
_nearPlane(0.1f),
_farPlane(10000.0f),
_viewportAspectRatio(16.0f/9.0f)

可能是深度冲突。你的远平面与近平面之比非常大。尝试增加近平面值或减小远平面值。 - Reto Koradi
有趣的是,你尝试过将远平面改为10.0f或100.0f这样较小的值吗? - Iggy
即使我将远平面设置为100,这种情况仍会发生。我也了解了深度抖动的问题,但这似乎不是问题所在。 - qwertzguy
你在创建GL上下文时请求了一些深度缓冲区位吗?除非你要求,否则你可能无法从操作系统中获取它们。你启用了深度测试吗? - genpfault
嘿,我找到了解决方法。我必须为每个帧重新启用深度测试,而不仅仅是在渲染器创建时。现在它运作良好,感谢你们所有的帮助!是否有任何接受评论的方式? :) 最终产品:http://i.snag.gy/CsdJ2.jpg - qwertzguy
显示剩余3条评论
1个回答

1
感谢大家提供的有用评论。我找到了问题,并希望其他遇到此问题的人能从中受益。我需要在每一帧之前重新启用深度缓冲(glEnable(GL_DEPTH_TEST)),而不是在渲染器创建时只执行一次。我以为这是全局状态,因此不需要每次渲染都重置。

最终产品看起来像这样,没有深度缓冲问题:

enter image description here

无论如何,希望这能帮助到某些人。

6
实际上,glEnable(GL_DEPTH_TEST) 是一个全局状态。 - concept3d
7
你可能在程序的某个地方更新了 GL_DEPTH_TEST 的状态,请确保搜索所有出现 GL_DEPTH_TEST 的实例,并检查你是如何处理它的,以保证安全性。 - Luis Yanes
谢谢您的回复,我会检查一下。 - qwertzguy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接