OpenGL ES Programming Guide for iOS 关于OpenGL ES

来源:互联网 发布:中国石油大学网络自助 编辑:程序博客网 时间:2024/05/16 17:31

关于OpenGL ES

开放图形库(OpenGL)用于二维和三维数据可视化。它是一种多用途的开放标准,支持2D和3D数字内容创作,机械和建筑设计,虚拟原型,模拟飞行,视频游戏等等。使用OpenGL来配置3D图形管线,提交数据。OpenGL通过顶点变换和照明,组装成原语和光栅化来创建2D图像。OpenGL被设计成将函数变换为图形命令,发送到底层图形硬件。因为这个底层的硬件是专门为图形处理命令,所以OpenGL画图通常是非常快的。

 

嵌入式OpenGL(OpenGLES)是OpenGL的一个简化版本,它消除了冗余功能,以提供一个库,它是既容易学习,更容易在移动图形硬件上实现 。

 

概览

OpenGL ES的允许一个app利用底层图形处理器的能力。在iOS设备上的GPU可以对每一个像素进行复杂的2D和3D绘图,以及复杂的着色计算来产生最终图像。如果你的app要求直接和尽可能地使用GPU硬件特性,您应该使用OpenGLES。典型使用OpenGLES的客户如视频游戏和模拟,来呈现3D图形。

 

OpenGL ES是一种低层次的,硬件为中心的API。虽然它提供了最强大和灵活的图形加工工具,但它也有一个陡峭的学习曲线,可以帮助你的app的整体设计提升一个显著的效果。 对于需要高性能图形更专业用途的应用程序,iOS提供了一些更高级的框架:

●SpriteKit框架提供了硬件加速动画系统用于创建2D游戏。 (见SpriteKit编程指南。)

●CoreImage框架提供静态和动态影像的实时过滤和分析。 (见CoreImage编程指南。)

●核心动画对所有的iOSapp提供硬件加速图形渲染和动画的基础 ,以及一个简单的声明性编程模型,使得它很容易实现复杂的用户界面的动画。 (见CoreAnimation编程指南。)

●添加动画,物理动力学,以及其他特殊效果来增强UIKit框架里的CocoaTouch用户界面功能。

 

iOSOpenGL ES的是一个与平台无关的API

OpenGL ES的是一个基于CAPI,它容易移植,被广泛支持。作为一个CAPI,它无缝的集成到Objective-CCocoa touch app中。OpenGL ES的规范没有定义一个窗口层;相反,操作系统必须提供相应的功能来创建一个OpenGLES渲染上下文, 它接受命令和帧缓冲区,作为任何绘图命令执行结果的区域。iOS与OpenGLES配合,需要使用iOS类来设置和显示绘图表面,并使用平台无关的API来绘制其内容。

 

相关章节: “OpenGL ES in iOS”(13页), “Configuring OpenGL ES Contexts”(17页)

 

GLKit提供一个绘图表面和动画支持

View和ViewController,由UIKit框架定义,控制iOS上的视觉内容的呈现。GLKit框架提供这些类的OpenGLES的对应版本。开发OpenGLES app,可以使用GLKView对象来渲染OpenGLES内容。也可以使用一个GLKViewController对象管理视图,并支持动画。

 

相关章节:“用OpenGLES和GLKit绘图”(第21页)

 

IOS支持替代渲染目标

除了绘画内容以填满整个屏幕或视图层次结构中的一部分,你也可以使用OpenGLES的 帧缓冲对象作为其他的渲染策略。iOS实现了标准的OpenGLES帧缓冲对象, 当OpenGLES场景在别的地方时,使用渲染到屏幕外的缓冲或纹理。 此外,iOS上的OpenGLES支持绘制到一个核心动画层(CAEAGLLayer类),这样可以与其它层相结合,建立应用程序的用户界面或其他可视显示。

 

相关章节:“绘制到其他渲染目的地”(第30页)

 

应用程序额外的性能优化

图形处理器并行设备优化图形操作。要获得出色的性能,你必须仔细设计你的应用程序提交给OpenGLES的数据和命令,保证显卡硬件可以并行运行。一个调试不畅的应用程序会导致CPU或GPU等待其他处理命令的完成。

 

仔细设计应用程序来有效地使用OpenGLES API。一旦完成了构建应用程序, 使用工具来微调应用程序的性能。如果应用程序瓶颈存在于OpenGLES,使用本指南中提供的信息来优化应用程序的性能。

 

Xcode中提供了一些工具来帮助提高OpenGLES应用程序的性能。

 

相关章节:“OpenGLES设计指南”(第46页),“最佳实践与合作顶点数据“(第67页),”最佳实践与纹理数据“(第80页),”最佳实践着色器“(第85页),”微调OpenGLES应用程序“(第55页)

 

在后台应用程序OpenGL ES不能使用

在后台运行的应用程序不能调用OpenGLES的功能。如果应用程序访问图形处理器,而它是在后台运行,iOS会自动终止。为了避免这种情况,应用程序在被移动到后台前应该刷新先前提交给OpenGLES的任何未执行的命令,并避免调用OpenGLES,直到它被切换回前台。

 

相关章节:“多任务处理,高分辨率,和其他的iOS功能”(第41页)

 

多线程应用程序中OpenGL ES的限制

在应用程序中采取并发性是可行的,以帮助提高应用程序的性能。如果你打算添加并发到OpenGLES的应用程序,你必须确保它不会从同时两个不同的线程访问相同的内容。

 

相关章节:“并发和OpenGLES”(第63页)

 

如何使用本文档

阅读“iOS中的OpenGLES”(第13页),它提供的OpenGLES是如何整合的到iOS中。然后顺序阅读其他章节。

 

经验丰富的iOS开发人员应该专注于阅读“OpenGLES绘图和GLKit”(第21页),以了解如何将OpenGLES整合到应用程序中,“多任务,高解析度,以及其他iOS功能“(第41页)说明在iOS应用程序使用OpenGLES的重要注意事项。然后,阅读“OpenGLES 设计指南“(第46页)深入挖掘如何设计高效的OpenGLES应用程序。

 

除非另有说明,在这本书的OpenGLES代码示例都是OpenGLES 2.0的。在其他的OpenGLES版本上可能需要进行修改。

 

先决条件

在尝试使用OpenGLES前,你应该已经熟悉一般的iOS应用程序的体系结构。请看StartDeveloping iOS Apps Today。 这篇文档不是一个完整的OpenGLES API教程。要了解更多有关如何创建OpenGL ES应用程序,请看下面的参考资料。

 

参见

OpenGL ES是由Khronos集团定义一个开放的标准。有关OpenGLES的更多信息 标准,请咨询他们的网页http://www.khronos.org/opengles/。

●  OpenGL®ES 2.0 Programming Guide,由Addison-Wesley出版,提供了OpenGLES概念的一个全面介绍。

●  OpenGL®Shading Language,第三版,还是由Addison-Wesley出版,提供了许多可用在OpenGLES应用程序中的着色算法。你可能需要根据移动图形处理器修改其中的一些算法。

●  OpenGLES API Registry是最终的OpenGLES规范的官方库,OpenGLES的阴影 语言规范,OpenGLES扩展文件。

●  OpenGLES 1.1 Reference Pages提供了完整的OpenGLES1.1规范参考,索引 按字母顺序排列。

●  OpenGLES 2.0 Reference Pages提供了完整的OpenGLES2.0规范参考,索引 按字母顺序排列。

●  OpenGLES 3.0 Reference Pages提供了完整的OpenGLES2.0规范参考,索引 按字母顺序排列。

●  OpenGLES Framework Reference描述了由苹果提供的,整合到iOS的,平台特定的函数和类 。

●  iOSDevice Compatibility Reference提供了在应用程序可用的硬件和软件的详细信息。

●  GLKitFramework Reference介绍了由苹果提供的一个框架,使之更容易开发OpenGLES 2.0的和3.0的应用程序。

 

0 0
原创粉丝点击