1

我正在研究旋转网格,除了在旋转的某些阶段之外,它在大多数情况下都可以正常工作。例如:

在此处输入图像描述

介于两者之间

在此处输入图像描述

在此处输入图像描述

正如你所看到的,就像 OpenGL 改变了它对前面的东西的看法。有趣的是,前后两个阶段本身看起来都很“正常”,尽管它们是一种相互逆转。(这是一种迷幻的光学效果,但不是我想要的。)

我正在使用 GLKit 在 iOS 6 中编程。

我不知道我的问题是与设置和绘图代码有关,还是与我进行旋转的方式有关。任何见解将不胜感激。

4

1 回答 1

1

发布后很高兴找到我的答案。只需要启用深度缓冲区。

view.drawableDepthFormat = GLKViewDrawableDepthFormat16;

(视图是你的GLKView*

感谢 Ray Wenderlich 的精彩解释

drawableDepthFormat

您的 OpenGL 上下文还可以选择有另一个与之关联的缓冲区,称为深度缓冲区。这有助于确保更靠近观察者的对象显示在更远的对象前面。

默认情况下,OpenGL 的工作方式是在缓冲区中的每个像素处存储离查看器最近的对象。当它要绘制一个像素时,它会检查深度缓冲区以查看它是否已经绘制了更靠近观察者的东西,如果是则丢弃它。否则,它将它添加到深度缓冲区和颜色缓冲区。

您可以设置此属性来选择深度缓冲区的格式。默认值为 GLKViewDrawableDepthFormatNone,这意味着根本没有启用深度缓冲区。

但是如果你想要这个特性(你通常为 3D 游戏做),你应该选择 GLKViewDrawableDepthFormat16 或 GLKViewDrawableDepthFormat24。这里的权衡是使用 GLKViewDrawableDepthFormat16,您的应用将使用更少的资源,但是当对象彼此非常接近时,您可能会遇到渲染问题。

于 2014-03-29T02:05:12.057 回答