6

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

我怎样才能解决这个问题?

4

3 回答 3

5

我的应用程序基于默认框架,在基于 Retina 的设备上运行时遇到了这个问题。具体来说,我的帧缓冲区是在 320x480 而不是我想要的 640x960 下创建的。抱歉,James 但这不是自动的,因为问题出在由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;
}

感谢 David Amador 的帖子为我指明了正确的方向。最近感谢 simeon 的有用评论。

于 2011-04-08T11:36:03.443 回答
1

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

if( [[UIScreen mainScreen] respondsToSelector:@selector(scale)] )
{
    self.contentScaleFactor = [[UIScreen mainScreen] scale];   
}
于 2012-03-10T07:07:40.497 回答
-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);

我希望这能为您指明正确的方向。

于 2011-02-03T09:50:20.877 回答