ios – 为视网膜和非视网膜显示开发OpenGL ES

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

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

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

感谢先进的所有帮助.

Ë

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

Blockquote
If your application uses OpenGL ES for rendering,your existing drawing code should continue to work without any changes. When drawn on a high-resolution screen,though,your content is scaled accordingly and will appear more blocky. The reason for the blocky appearance is that the default behavior of the CAEAGLLayer class,which you use to back your OpenGL ES renderbuffers,is the same as other Core Animation layer objects. In other words,its scale factor is set to 1.0 initially,which causes the Core Animation compositor to scale the contents of the layer on high-resolution screens. To avoid this blocky appearance,you need to increase the size of your OpenGL ES renderbuffers to match the size of the screen. (With more pixels,you can then increase the amount of detail you provide for your content.) Because adding more pixels to your renderbuffers has performance implications,you must explicitly opt in to support high-resolution screens.

Blockquote
To enable high-resolution drawing,you must change the scale factor of the view you use to present your OpenGL ES content. Changing the contentScaleFactor property of your view from 1.0 to 2.0 triggers a matching change to the scale factor of the underlying CAEAGLLayer object. The renderbufferStorage:fromDrawable: method,which you use to bind the layer object to your renderbuffers,calculates the size of the renderbuffer by multiplying the layer’s bounds by its scale factor. Thus,doubling the scale factor doubles the width and height of the resulting renderbuffer,giving you more pixels for your content. After that,it is up to you to provide the content for those additional pixels.

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

编辑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,1);
glTranslatef(-1 * (height / 2),-1 * (width / 2),0);

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

解决方法

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

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

Coordinate values are represented using floating-point numbers,which
allow for precise layout and positioning of content regardless of the
underlying screen resolution

这意味着您指定的点(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

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...