【问题标题】:Developing for Retina and non-retina displays OpenGL ES为 Retina 和非 Retina 显示器开发 OpenGL ES
【发布时间】:2012-05-02 00:02:50
【问题描述】:

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

开发人员完成这项工作的最常见方式是什么?我看到过类似的问题,但具有特定的性质。我正在寻找完整的包裹。 IE。我想支持不同分辨率的位图字体、图片等。

设备特定的开关或 if 语句是标准的吗?

感谢所有高级帮助。

E

编辑:我从 Apple 找到了这个:

块引用 如果您的应用程序使用 OpenGL ES 进行渲染,您现有的绘图代码应该继续工作而无需任何更改。但是,当在高分辨率屏幕上绘制时,您的内容会相应地缩放,并且会显得更加块状。出现块状外观的原因是用于支持 OpenGL ES 渲染缓冲区的 CAEAGLLayer 类的默认行为与其他核心动画层对象相同。换句话说,它的缩放因子最初设置为 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);

感谢您的关注。我希望这对某人有所帮助。

【问题讨论】:

  • 在 iPad3 上设置 contentScale = 2 以获得视网膜支持有什么好处吗? stackoverflow.com/questions/11276027/…
  • 我还没有尝试过 iPad 的视网膜显示器。当我这样做时,我会再次触摸。

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


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回复。我一定会阅读该指南。我认为这对我不起作用(可能是错误的)。正如我首先应该提到的,我所有的图像都来自 OpenGL ES 而不是 UIKit。
【解决方案2】:

你只需要在你的包中拥有@2x-versions 的图像。如果在 Retina 硬件上运行,iOS 会自动采用 @2x 版本

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多