我需要在 iPhone 3G (OpenGL ES1.1) 中进行抗锯齿,而不是在带有 OpenGL ES.2.0 的 iPhone 3Gs 中。我已经绘制了 3d 模型并有下一个:模型边缘的像素看起来像牙齿。
我尝试为纹理设置任何过滤器,但是这个过滤器使只有纹理内部看起来更好。
我怎样才能做出好的抗锯齿?可能我应该使用任何平滑来绘制三角形吗?如果是,那么在 OpenGL ES1.1 中怎么可能?
谢谢。
我需要在 iPhone 3G (OpenGL ES1.1) 中进行抗锯齿,而不是在带有 OpenGL ES.2.0 的 iPhone 3Gs 中。我已经绘制了 3d 模型并有下一个:模型边缘的像素看起来像牙齿。
我尝试为纹理设置任何过滤器,但是这个过滤器使只有纹理内部看起来更好。
我怎样才能做出好的抗锯齿?可能我应该使用任何平滑来绘制三角形吗?如果是,那么在 OpenGL ES1.1 中怎么可能?
谢谢。
从 iOS 4.0 开始,通过 Apple 对 OpenGL 的扩展直接支持全屏消除锯齿。基本概念类似于 epatel 的建议:将场景渲染到更大的帧缓冲区,然后将其复制到屏幕大小的帧缓冲区,然后将该缓冲区复制到屏幕。不同之处在于,不是创建纹理并将其渲染到四边形上,而是由单个函数调用(特别是glResolveMultisampleFramebufferAPPLE()
)执行复制/采样操作。
有关如何设置缓冲区和修改绘图代码的详细信息,您可以阅读Gando Games 博客上为 OpenGL ES 1.1 编写的教程;Apple 的开发者论坛上也有一个注释解释了同样的事情。
感谢 Bersaelor在另一个 SO question 中指出这一点。
您可以渲染成更大的 FBO,然后将其用作正方形上的纹理。
看看这篇文章以获得解释。
查看eglChooseConfig()和glEnable(GL_MULTISAMPLE)的 EGL_SAMPLE_BUFFERS 和 EGL_SAMPLES 参数。
编辑: Hrm,显然你不走运,至少就标准化方法而言。如该线程中所述,您可以渲染到较大的屏幕外纹理并缩放到较小的屏幕四边形或多次抖动视图矩阵。
我们找到了另一种方法来实现这一点。如果您编辑纹理并添加例如 2 像素的透明像素帧,则纹理中的彩色像素会在必要时与透明像素混合,从而产生基本的抗锯齿效果。您可以在我们的博客中阅读全文。
这种方法的优点是您不会渲染更大的图像,或复制缓冲区,或者更糟糕的是,从缓冲区制作纹理,因此不会影响性能。