使用现代移动图形硬件
嵌入式系统包括各种各样的设备,从飞机驾驶舱到自动售货机。绝大多数具有3d功能的嵌入式系统是手持电脑,如苹果的iPhone、iPod Touch和iPad,或者基于谷歌Android操作系统的手机。来自索尼、任天堂和其他公司的手持设备也包括强大的内置3D图形功能。
OpenGL for Embedded Systems (OpenGL ES)定义了嵌入式3D图形的标准。运行iOS 5的苹果iPhone、iPod Touch和iPad设备支持OpenGL ES 2.0版本。苹果的设备也支持旧的OpenGL ES 1.1版本。iOS 5引入的一个名为GLKit的软件框架简化了许多常见的编程任务,并部分隐藏了两个支持的OpenGL ES版本之间的差异。这本书的重点是OpenGL ES 2.0版本的iOS 5与GLKit。
OpenGL ES定义了与美国国家标准协会(ANSI) C编程语言一起使用的应用程序编程接口(API)。通常用于苹果产品编程的c++和Objective-C编程语言与ANSI C无缝交互。特殊的翻译层或“绑定”存在,因此OpenGL ES可以从JavaScript和Python等语言中使用。新兴的web编程标准,如来自非营利组织Web3D联盟的WebGL,也准备在网页内实现对OpenGL ES API的标准化跨平台访问。本书中解释的3D图形概念适用于所有具有3D功能的嵌入式系统。
本章不深入讨论具体的编程细节,而是解释使用OpenGL ES和iOS 5生成3D图形的一般方法。现代硬件加速的3D图形是先进移动产品产生的所有视觉效果的基础。阅读本章是从移动硬件中挤出最佳3D图像和视觉效果的第一步。
什么是3D渲染?
图形处理单元(GPU)是一种硬件组件,它将描述几何、颜色、光线和其他信息的数据组合在一起,在屏幕上生成图像。屏幕只有两个维度,因此显示3D数据的技巧是生成一个图像,欺骗眼睛看到缺失的第三个维度,如中的示例图1.1.
图1.1从3D数据生成的样例图像。
从三维数据生成二维图像称为呈现.计算机显示器上的图像是由矩形的彩色点组成的像素.图1.2显示图像的放大部分以显示单个像素。如果您通过放大镜检查显示器,您将看到每个像素都由三种颜色元素组成:红点、绿点和蓝点。图1.2还显示了进一步扩大的单个像素来描绘单个颜色元素。在全彩显示上,像素总是具有红色、绿色和蓝色元素,但是这些元素可能以不同于所示并排排列的模式排列图1.2.
图1.2图像由像素组成,每个像素都有红色、绿色和蓝色元素。
图像使用一个数组存储在计算机内存中,该数组对每个像素至少包含三个值。第一个值指定像素的红色元素的强度。第二个值是绿色强度,第三个值是蓝色强度。包含10,000个像素的图像可以作为30,000个强度值的数组存储在内存中-每个像素中的三个颜色元素中的每个元素都有一个值。不同强度的红、绿、蓝的组合足以产生彩虹的每一种颜色。如果这三个元素的强度都为零,则生成的颜色为黑色。如果这三种元素都有充分的强度,那么感知到的颜色就是白色。黄色是由红色和绿色混合而成,没有任何蓝色。Mac OS X标准彩色面板用户界面如图所示图1.3包含图形滑块来调整相对的红、绿、蓝(RGB)强度。
图1.3。用户界面调整红,绿,蓝颜色成分的强度。
将3D数据渲染为2D图像通常需要几个单独的步骤,包括计算设置图像中每个像素的红、绿、蓝强度。作为一个整体,本书描述了程序如何在渲染过程的每个步骤中最好地利用OpenGL ES和图形硬件。第一步是为GPU提供要处理的3D数据。