开发视网膜和非视网膜显示OpenGL ES

Cal*_*tle 7 cocoa-touch opengl-es ios retina-display

在深入了解我的下一个项目之前,我正在寻找建议.我想支持iOS现在支持的所有各种分辨率(视网膜,非视网膜iPhone和所有3个iPad).

开发人员完成这项工作最常见的方式是什么?我已经看到了类似问题,但具体问题.我正在寻找完整的包裹.IE浏览器.我想支持不同的分辨率位图字体,图像等.

是设备特定的开关,还是if语句标准?

感谢先进的所有帮助.

Ë

编辑:我从Apple发现了这个:

Blockquote如果您的应用程序使用OpenGL ES进行渲染,则现有的绘图代码应该继续工作而不进行任何更改.但是,在高分辨率屏幕上绘制时,您的内容会相应缩放,并且会显得更加模糊.块状外观的原因是CAEAGLLayer类的默认行为(用于支持OpenGL ES渲染缓冲区)与其他Core Animation层对象相同.换句话说,它的比例因子最初设置为1.0,这使得Core Animation合成器在高分辨率屏幕上缩放图层的内容.为避免出现这种块状外观,您需要增加OpenGL ES渲染缓冲区的大小以匹配屏幕大小.(使用更多像素,您可以增加为内容提供的详细信息量.)但是,为渲染缓冲区添加更多像素会影响性能,但必须明确选择支持高分辨率屏幕.

Blockquote要启用高分辨率绘图,您必须更改用于显示OpenGL ES内容的视图的比例因子.将视图的contentScaleFactor属性从1.0更改为2.0会触发对基础CAEAGLLayer对象的比例因子的匹配更改.renderbufferStorage:fromDrawable:方法,用于将图层对象绑定到渲染缓冲区,通过将图层的边界乘以其比例因子来计算渲染缓冲区的大小.因此,将比例因子加倍会使得渲染缓冲区的宽度和高度加倍,从而为您的内容提供更多像素.之后,由您来提供这些额外像素的内容.

所以我想我更新的问题是如何将上述比例因子加倍?

编辑2:

我几乎在那里......

我正在使用它来扩展我的EAGLView:

        // Adjust for retina displays
    if ([self respondsToSelector:@selector(setContentScaleFactor:)])
    {
            self.contentScaleFactor = [[UIScreen mainScreen] scale];
    }
Run Code Online (Sandbox Code Playgroud)

现在唯一的问题是原点在某种程度上搞砸了.现在显示图像根据分辨率进行缩放,但是在较大分辨率下,图像从屏幕中间开始.

请帮忙!

编辑3:解决了!!!! 我遇到了我的方向问题.

您需要确保您的翻译已更新.我用过这个:

    glTranslatef( width / 2, height /2, 0);
glRotatef(-90, 0, 0, 1);
glTranslatef(-1 * (height / 2),-1 * (width / 2),0);
Run Code Online (Sandbox Code Playgroud)

谢谢你的容貌.我希望这可以帮助别人.

bry*_*mac 2

请参阅视图编程指南:查看几何图形和坐标系

http://developer.apple.com/library/ios/#DOCUMENTATION/WindowsViews/Conceptual/ViewPG_iPhoneOS/WindowsandViews/WindowsandViews.html

坐标值使用浮点数表示,无论底层屏幕分辨率如何,都可以精确布局和定位内容

这意味着您指定的点(GCRect 等...)不是像素 - 它是针对视网膜/非视网膜进行调整的点

最后,正如 Cocoa Priest 所说,您可以维护 png 图像和图像的 *@2x.png 版本:

iPhone 上的 Retina 显示图像

@2x for Retina 显示应用程序的意义是什么?

另外,这里有一篇关于视网膜设计的文章: http://globalmoxie.com/blog/designing-for-iphone4-retina-display.shtml

  • 我很欣赏你的回应。我一定会阅读该指南。我认为这对我不起作用(可能是错误的)。正如我应该首先提到的,我的所有图像都来自 OpenGL ES 而不是 UIKit。 (2认同)