用于嵌入式系统的OpenGL ES定义了嵌入式3D图像的标准。ios的设备比如iphone、ipod touch以及ipad设备支持的是openGL ES2.0.

这里只简单介绍最基础的有关openGL的一些东西。

一. 3D渲染

图形处理单元GPU就是能够结合几何、颜色、灯光和其他数据而产生一个屏幕图像的硬件组件。屏幕只有2维,因此显示3D数据的技巧就在于产生能够迷惑眼睛使其看到丢失的第3维的一个图像。

用3D数据生成一个2D图像的过程就叫渲染。在计算上显示的图片是由矩形的颜色点组成的,这些矩形的颜色叫做像素。每个像素都是由三个颜色组成:RGB。

二. 为图像处理器提供数据

程序会为保存3D场景数据到硬件随机存取存储器(RAM)中。嵌入式系统的中央处理单元有专门为其分配的RAM。在图像处理的过程中,GPU也有专门为其分配的RAM。使用现代硬件渲染3D图像的速度几乎完全取决于不同的内存区域被访问的方式。OpenGL ES是一种软件技术,部分运行在GPU上,部分运行在CPU上,横跨在两个处理器之间。协调两个处理器之间的内存交换。如下图所示,中间为OPenGL,右边为GPU,每个箭头都代表了性能瓶颈。

要尽量避免内存区域之间的数据交换。

iOS opengl surface 推流 ipad opengl_3D

缓存:openGL为两个内存直接的交换定义了缓存的概念。程序从cpu的内存复制数据到Opengl的缓存,在GPU取得一个缓存的所有权之后,GPU就可以以最有效的方式读写内存。

几乎所有的程序提供给GPU的数据都应该放入缓存中,缓存存储的到底是几何数据、颜色、灯光效果,还是其他信息并不重要。为缓存提供数据有如下步骤:

iOS opengl surface 推流 ipad opengl_缓存_02

iOS opengl surface 推流 ipad opengl_数据_03

iOS opengl surface 推流 ipad opengl_3D_04

三. 帧缓存

GPU需要知道应该在内存中的哪个位置存储渲染处理的2D图像像素数据。就像为GPU提供数据的缓存一样,接收渲染结果的缓存区叫做帧缓存。程序会像任何其他种类的缓存一样生成、绑定、删除帧缓存。但是帧缓存不需要初始化,因为渲染指令会再是当地额时候替换缓存的内容。帧缓存会在被绑定的时候隐式开启,同时OpenGL es会自动地根据特定平台的硬件配置和功能来设置数据的类型和偏移。分为前帧缓存和后帧缓存。程序和操作系统很少会直接渲染到前帧缓存中,大部分保存在后帧缓存中。

当渲染后的后帧缓存包含一个完成的图像时,前帧缓存和后帧缓存几乎会瞬间切换,前帧会变成后帧,后帧会变成前帧。

 

四.OpenGL ES上下文

用于配置opengl es的保存在特定平台的软件数据结构中的信息会被封装在一个opengl es上下文(context)中。opengl是一个状态机器,上下文中的信息可能会被保存在cpu所控制的内存中,也可能被保存在GPU所控制的内存中。openGL会按需在两个内存区域之间复制信息。

openGL的上下文会跟踪用于渲染的帧缓存。还会跟踪用于几何数据、颜色等的缓存。上下文会决定是否使用某些功能,比如纹理和灯光。还会为渲染定义当前的坐标系统。

五. 3D场景坐标系

笛卡尔坐标系。

iOS opengl surface 推流 ipad opengl_3D_05

每个点的坐标通过x/y/z定义。