我试图让我的OPENGL ES应用支持视网膜显示。我添加了带有@2x扩展名的图像,并将内容比例因子设置为2。高分辨率图像已正确显示在屏幕上,但质量严重下降。边缘模糊,没有我添加到资源文件夹中的图像质量。
我该怎么解决这个问题?
我试图让我的OPENGL ES应用支持视网膜显示。我添加了带有@2x扩展名的图像,并将内容比例因子设置为2。高分辨率图像已正确显示在屏幕上,但质量严重下降。边缘模糊,没有我添加到资源文件夹中的图像质量。
我该怎么解决这个问题?
我在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;
}
感谢David Amador的帖子指引我正确的方向。最近,也感谢simeon的有用评论。
else
分支,因为没有视网膜预iOS 4.0设备,所以如果mainScreen不响应scale
选择器,则可以确定它是非视网膜屏幕。 - simeonif( [[UIScreen mainScreen] respondsToSelector:@selector(scale)] )
{
self.contentScaleFactor = [[UIScreen mainScreen] scale];
}
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);
希望这能指引你朝着正确的方向前进。