2009-01-11 165 views
13

我想在iPhone上的OpenGL ES应用上实现FSAA如何在iPhone上实现全景抗锯齿

目前我通过将场景渲染为宽度和高度两倍的纹理来实现此目的。然后我用漂亮的功能:

void glDrawTexiOES(GLint x, GLint y, GLint z, GLint width, GLint height); 

绘制调整大小到屏幕分辨率的图像。

有没有更好的方法来做到这一点?

更新赏金增加我很纳闷,因为其现在2010年1月,是否有更好的方法来做到这一点的V3.1 3GS手机等

回答

8

对于PSP上的Gran Turismo,开发者通过将图像每帧来回移动一个像素(示例可在此处找到:http://www.gtplanet.net/why-gran-turismo-psp-looks-so-good/)实现类似于抗锯齿的效果,因此如果iPhone不支持你正在寻找这个选项。

+0

唯一的问题是你需要达到60 fps :-) – 2010-02-25 19:36:27

3

技术上iPhone的GPU(了PowerVR MBX精简版)应该支持抗锯齿。但是,目前的Apple OpenGL ES驱动程序(截至2009年1月)似乎并未公开此功能。所以像你一样做“手动AA”几乎是唯一的方法。

2

http://iphonedevelopment.blogspot.com/2009/06/opengl-es-2-shaders.html?showComment=1245770504079#c6001476340022842908

iPhone OS 3.0 + OpenGL ES 2.0. Is anyone seeing better anti-aliasing?

听起来像是你不能这样做硬件,因为你不渲染帧缓冲区,只有质地iPhone的复合材料为您服务。

+0

我真的很喜欢那个博客链接。关于AA特征为何未被驾驶员暴露的解释确实是完全合理的,并且帮助我理解了推理。谢谢您的发布。 – Till 2010-02-25 21:41:12

8

从iOS 4.0开始,全屏抗锯齿直接通过Apple OpenGL的扩展支持。基本概念与您已经在做的相似:将场景渲染到更大的帧缓冲区,然后将其复制到屏幕大小的帧缓冲区,然后将该缓冲区复制到屏幕。不同之处在于,不是创建纹理并将其渲染到四边形,而是通过单个函数调用(具体地,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