具有旋转表面的OpenGL ES 2.0工件

时间:2014-03-29 01:50:27

标签: ios opengl-es glkit visual-artifacts

我正在使用旋转网格,除了在旋转的某些阶段外,它在大多数情况下都能正常工作。例如:

enter image description here

介于

之间

enter image description here

enter image description here

正如您所看到的,它就像OpenGL改变了它对前面的内容的看法。有趣的是,前后阶段看起来都是正常的"在他们自己,虽然他们是一种相互逆转。 (这是一种幻觉的光学效果,但不是我想要的。)

我使用GLKit在iOS 6中编程。

我不知道我的问题是否与设置和绘图代码有关,或者是否与我进行轮换的方式有关。任何见解都会非常感激。

1 个答案:

答案 0 :(得分:1)

发布此内容后,很高兴找到了答案。只需要启用深度缓冲区。

view.drawableDepthFormat = GLKViewDrawableDepthFormat16;

(其中view是您的GLKView*

谢谢Ray Wenderlich nice explanation

<强> drawableDepthFormat

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

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

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

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