【问题标题】:antialiasing iPhone OpenGLES抗锯齿 iPhone OpenGLES
【发布时间】:2010-02-10 09:36:50
【问题描述】:

我需要在 iPhone 3G (OpenGL ES1.1) 中进行抗锯齿,而不是在带有 OpenGL ES.2.0 的 iPhone 3Gs 中。 我已经绘制了 3d 模型,并且下一个:模型边缘的像素看起来像牙齿。

我尝试为纹理设置任何过滤器,但这个过滤器使 ONLY 纹理 INSIDE 看起来更好。

我怎样才能做出好的抗锯齿? 可能我应该使用任何平滑来绘制三角形吗?如果是,那么在 OpenGL ES1.1 中怎么可能?

谢谢。

【问题讨论】:

    标签: iphone opengl-es antialiasing


    【解决方案1】:

    从 iOS 4.0 开始,通过 Apple 对 OpenGL 的扩展直接支持全屏抗锯齿。 基本概念类似于 epatel 的建议:将场景渲染到更大的帧缓冲区,然后复制将其缩小到屏幕大小的帧缓冲区,然后将该缓冲区复制到屏幕上。不同之处在于,不是创建纹理并将其渲染到四边形上,而是通过单个函数调用(特别是 glResolveMultisampleFramebufferAPPLE())执行复制/采样操作。

    有关如何设置缓冲区和修改绘图代码的详细信息,您可以阅读为 OpenGL ES 1.1 编写的a tutorial on the Gando Games blog;还有a note on Apple's Developer Forums解释了同样的事情。

    感谢 Bersaelor 提供pointing this out in another SO question

    【讨论】:

      【解决方案2】:

      您可以渲染成更大的 FBO,然后将其用作正方形上的纹理。

      请查看this 文章以获得解释。

      【讨论】:

      • 非常感谢您提供此链接!我会尝试“渲染成更大的 FBO”。
      • 我已经发布了一个新答案:概念是相同的,但在较新版本的 iOS 中有更简单的方法。
      【解决方案3】:

      查看 eglChooseConfig()glEnable(GL_MULTISAMPLE) 的 EGL_SAMPLE_BUFFERS 和 EGL_SAMPLES 参数。

      编辑:Hrm,apparently 你运气不好,至少就标准化方法而言。如该线程中所述,您可以渲染到较大的屏幕外纹理并缩放到较小的屏幕四边形或多次抖动视图矩阵。

      【讨论】:

      • 谢谢,但 iPhone 上的 openGL 不支持 eglChooseConfig()。还是我弄错了?但是当我设置 GL_LINE_SMOOTH 并将 glDrawArrays 与 GL_LINE_STRIP 一起使用时,我有超级抗锯齿线。但是当我设置 GL_TRIANGLES 然后这个效果就消失了。
      • 看来你是对的。奇怪的。无论如何,找到了一个带有一些替代方法的线程并编辑了答案。
      • genpfault,可能是。我用谷歌搜索了更多的网站,感觉只有一种方法 - 尝试使用这个gamedev.net/community/forums/topic.asp?topic_id=548956 或类似的。
      【解决方案4】:

      我们找到了另一种方法来实现这一目标。如果您编辑纹理并添加例如 2 像素的透明像素帧,则纹理中的彩色像素会在必要时与透明像素混合,从而提供基本的抗锯齿效果。你可以在our blog阅读全文。

      这种方法的优点是您不需要渲染更大的图像,或者复制缓冲区,或者更糟糕的是,从缓冲区制作纹理,因此不会影响性能。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-18
      • 1970-01-01
      • 1970-01-01
      • 2016-06-28
      • 2011-07-05
      • 2014-03-19
      • 1970-01-01
      相关资源
      最近更新 更多