Retina显示图像质量问题

时间:2011-02-03 09:13:27

标签: iphone opengl-es retina-display

我试图让我的OPENGL ES应用程序支持视网膜显示。我添加了带有@ 2x扩展名的图像,并将内容比例因子设置为2.高分辨率图像正确地进入屏幕但是它的质量损失很大。边缘和模糊,它没有我添加到资源文件夹中的图像质量。

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:5)

我的应用程序基于默认框架,我在基于Retina的设备上运行时遇到此问题。具体来说,我的帧缓冲是按照我想要的320x480而不是640x960创建的。对不起詹姆斯,但这不是自动的,因为问题在于renderBufferStorage:fromDrawable:创建的帧缓冲区(代表我们调用glRenderbufferStorage,但默认情况下指定布局像素而不是宽度和高度的本机设备像素)。

我在 EAGLView.m initWithCoder 中设置 eaglLayer.drawableProperties 的换行符下面添加了以下代码:

UIScreen *mainScreen = [UIScreen mainScreen];
if ([mainScreen respondsToSelector:@selector(scale)])
{
    // iOS 4.0 and up (further to simeon's comment)
    const CGFloat scale = mainScreen.scale;
    self.contentScaleFactor = scale;
    eaglLayer.contentsScale = scale;
}

感谢大卫·阿马多尔post让我指向了正确的方向。最近,感谢simeon的有用评论。

答案 1 :(得分:1)

在您的EAGLView.m initWithCoder:方法中,添加以下代码:

if( [[UIScreen mainScreen] respondsToSelector:@selector(scale)] )
{
    self.contentScaleFactor = [[UIScreen mainScreen] scale];   
}

答案 2 :(得分:-1)

OpenGLES将自动以最大可能的分辨率在视网膜显示屏上呈现(假设您将视口设置为屏幕的宽度和高度等等),因此问题来自您的OpenGL渲染。

OpenGLES不关心你附加到图像的后缀@ 2X(这适用于Cocoa Touch框架)。但是,它确实关心图像的分辨率。为获得最佳效果,您应使用宽度和高度为2的幂的方形图像(例如1024,2048等)。

当您将纹理加载到OpenGLES中时,您应该确保使用正确的图像格式,并且不要以任何方式压缩它。

您应该尝试的另一件事是纹理参数。例如:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

我希望这能指出你正确的方向。