2011-02-03 66 views
6

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

我该如何解决这个问题?

+0

你测试它真实视网膜设备或模拟器? – Max 2011-02-03 09:46:29

回答

5

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

我添加下面一行行下面的代码设置eaglLayer.drawableProperties的initWithCoder:EAGLView.m

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; 
} 

感谢David阿马多尔的post指着我在正确的方向。谢谢,最近,西缅的有益的评论。

-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); 

我希望这点能指引您正确的方向。

+0

谢谢你的帮助。但即使尝试了你所说的话,它也没有显示出质量。你能告诉我如何知道图像是否被压缩?如果我使用Multisampling?我会得到更好的结果吗? – Aaron 2011-02-03 14:31:23

+0

你可以添加一些代码给你的问题,让你如何加载到OpenGLES的纹理jist?如果你使用多重采样(这更多的是优化),我认为你不会得到更好的结果。 – 2011-02-03 18:30:02

1

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

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