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

时间:2012-05-02 00:02:50

标签: ios cocoa-touch opengl-es retina-display

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

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

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

感谢先进的所有帮助。

电子

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

  

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

     

块引用   要启用高分辨率绘图,您必须更改用于显示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];
    }

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

请帮忙!

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

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

    glTranslatef( width / 2, height /2, 0);
glRotatef(-90, 0, 0, 1);
glTranslatef(-1 * (height / 2),-1 * (width / 2),0);

感谢你的外表。我希望这有助于某人。

2 个答案:

答案 0 :(得分:2)

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

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

  

坐标值使用浮点数表示,其中   允许精确布局和定位内容,无论如何   基础屏幕分辨率

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

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

Retina Display Images on iPhone

What is the point of the @2x for Retina display apps?

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

答案 1 :(得分:-2)

你只需要在你的包中拥有@ 2x版本的图像。如果在视网膜硬件上运行,iOS会自动获取@ 2x版本

相关问题