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)
谢谢你的容貌.我希望这可以帮助别人.
请参阅视图编程指南:查看几何图形和坐标系
坐标值使用浮点数表示,无论底层屏幕分辨率如何,都可以精确布局和定位内容
这意味着您指定的点(GCRect 等...)不是像素 - 它是针对视网膜/非视网膜进行调整的点
最后,正如 Cocoa Priest 所说,您可以维护 png 图像和图像的 *@2x.png 版本:
另外,这里有一篇关于视网膜设计的文章: http://globalmoxie.com/blog/designing-for-iphone4-retina-display.shtml
| 归档时间: |
|
| 查看次数: |
6249 次 |
| 最近记录: |