我试图让我的OPENGL ES应用程序支持视网膜显示。我添加了@ 2x扩展名的图像,并将内容比例因子设置为2.高分辨率图像正确显示在屏幕上,但质量严重受损。边缘和模糊,它没有我添加到资源文件夹中的图像的质量。视网膜显示图像质量问题
我该如何解决这个问题?
我试图让我的OPENGL ES应用程序支持视网膜显示。我添加了@ 2x扩展名的图像,并将内容比例因子设置为2.高分辨率图像正确显示在屏幕上,但质量严重受损。边缘和模糊,它没有我添加到资源文件夹中的图像的质量。视网膜显示图像质量问题
我该如何解决这个问题?
我的应用程序基于默认框架,在基于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指着我在正确的方向。谢谢,最近,西缅的有益的评论。
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);
我希望这点能指引您正确的方向。
谢谢你的帮助。但即使尝试了你所说的话,它也没有显示出质量。你能告诉我如何知道图像是否被压缩?如果我使用Multisampling?我会得到更好的结果吗? – Aaron 2011-02-03 14:31:23
你可以添加一些代码给你的问题,让你如何加载到OpenGLES的纹理jist?如果你使用多重采样(这更多的是优化),我认为你不会得到更好的结果。 – 2011-02-03 18:30:02
在你EAGLView.m的initWithCoder:方法,添加以下代码:
if([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
{
self.contentScaleFactor = [[UIScreen mainScreen] scale];
}
你测试它真实视网膜设备或模拟器? – Max 2011-02-03 09:46:29