OpenGL:远处的物体出现在近处物体的顶部

OpenGL: far objects appearing on top of near objects

我正在尝试使用 iOS GLKit 制作一个快速演示,以使用源 CAD 文件使用 OpenGL 渲染零售店地图。我能够以 2D 方式渲染墙壁和过道,然后以编程方式添加一些人工深度以创建一系列立方体。从上往下看时,所有这些看起来都很好,但我注意到当我打开地板时(z 值远低于过道和墙壁,其中一些对象实际上在地板下呈现:

...但是,如果您旋转模型,您可以看到地板下方实际上没有任何东西,并且一些过道在墙外渲染:

您可以在 StoreMapGLKitViewController.m 查看代码,这对我来说似乎很简单,但我确定我犯了某种 OpenGL 新手错误。

所以当你弄乱 Z 值时,所有的东西都为 z = 0,我想你仍然能够看到你的一些墙壁和过道,但它们也会挂出底一点。只要你不关心那个(它是一个演示,对)那么现在应该没问题我会的。

最终深度缓冲区没有设置正确,所以深度测试没有做任何事情。添加下面的代码修复它。

GLKView *view = (GLKView *)self.view;
view.drawableDepthFormat = GLKViewDrawableDepthFormat24;