我正在使用旋转网格,除了在旋转的某些阶段外,它在大多数情况下都能正常工作。例如:
前
介于
之间
后
正如您所看到的,它就像OpenGL改变了它对前面的内容的看法。有趣的是,前后阶段看起来都是正常的"在他们自己,虽然他们是一种相互逆转。 (这是一种幻觉的光学效果,但不是我想要的。)
我使用GLKit在iOS 6中编程。
我不知道我的问题是否与设置和绘图代码有关,或者是否与我进行轮换的方式有关。任何见解都会非常感激。
答案 0 :(得分:1)
发布此内容后,很高兴找到了答案。只需要启用深度缓冲区。
view.drawableDepthFormat = GLKViewDrawableDepthFormat16;
(其中view是您的GLKView*
)
谢谢Ray Wenderlich nice explanation:
<强> drawableDepthFormat 强>
您的OpenGL上下文还可以选择使用另一个与之关联的缓冲区,称为深度缓冲区。这有助于确保靠近观察者的物体显示在更远的物体前面。
默认情况下,OpenGL的工作方式是将最近的对象存储在缓冲区中每个像素的查看器中。当它绘制一个像素时,它会检查深度缓冲区以查看它是否已经绘制得更接近观察者的东西,如果是这样就丢弃它。否则,它将它添加到深度缓冲区和颜色缓冲区。
您可以设置此属性以选择深度缓冲区的格式。默认值为GLKViewDrawableDepthFormatNone,这意味着根本没有启用深度缓冲区。
但是如果你想要这个功能(通常用于3D游戏),你应该选择GLKViewDrawableDepthFormat16或GLKViewDrawableDepthFormat24。这里的权衡是使用GLKViewDrawableDepthFormat16,您的应用将使用更少的资源,但是当对象彼此非常接近时,您可能会遇到渲染问题。