我想在iPhone上的OpenGL ES应用程序上实现FSAA。
目前,我通过将场景渲染为屏幕宽度和高度的两倍的纹理来实现此目的。然后我使用了很好的功能:
void glDrawTexiOES(GLint x, GLint y, GLint z, GLint width, GLint height);
将图像调整为屏幕分辨率。
有更好的方法吗?
更新奖金已添加我想知道,鉴于它现在是2010年1月,是否有更好的方法在v3.1 3GS手机上执行此操作等。
答案 0 :(得分:8)
对于PSP上的Gran Turismo,开发人员通过每帧移动图像一个像素来实现类似于抗锯齿的效果(可以在此处进行演示:http://www.gtplanet.net/why-gran-turismo-psp-looks-so-good/),如果iPhone没有支持您正在寻找的选项。
答案 1 :(得分:8)
从iOS 4.0开始,通过Apple扩展程序直接支持全屏抗锯齿功能。基本概念类似于您已经在做的事情:将场景渲染到更大的帧缓冲区,然后将其复制到屏幕大小的帧缓冲区,然后将该缓冲区复制到屏幕上。不同之处在于,复制/采样操作不是创建纹理并将其渲染到四边形上,而是通过单个函数调用(具体地,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 :(得分:3)
技术上iPhone的GPU(PowerVR MBX Lite)应该支持抗锯齿。但是,目前Apple的OpenGL ES驱动程序(截至2009年1月)似乎没有公开此功能。因此,像你一样做“手动AA”几乎是唯一的方法。
答案 3 :(得分:2)
iPhone OS 3.0 + OpenGL ES 2.0. Is anyone seeing better anti-aliasing?
听起来你不能在硬件中做到这一点,因为你没有渲染到帧缓冲区,只有iPhone为你复合的纹理。