OpenGL ES 初探

560 阅读2分钟

OpenGL ES 是用于可视化的二维和三维数据,它是一个多功能开发过标准图形库,支持2D和3D数字内容创建,机械和建筑设计,虚拟原型设计,飞行模拟,视频游戏等应用程序。我们可以使用OpenGL配置的3D图形管道向其提供数据。OpenGL ES是OpenGL的简化版本,它消除了冗余的功能,提供了一个易于学习和在移动图形硬件中实现的库。OpenGL ES允许应用程序利用底层图形处理器的强大功能。iOS设备上的GPU可以执行复杂的2D和3D绘图,以及最终图像中每个像素的复杂着色计算。

OpenGL ES 图形管道

OpenGL ES 常见概念

顶点着色器

顶点着色器常用于处理顶点相关的数据业务,如矩阵变换位置,计算光照生成低逐点颜色,生成或变换纹理坐标等。

attribute vec4 position;
attribute vec2 textCoordinate; uniform mat4 rotateMatrix; 			varying lowp vec2 varyTextCoord; void main()
{
varyTextCoord = textCoordinate; vec4 vPos = position;
vPos = vPos * rotateMatrix; gl_Position = vPos;
}
图元装配

顶点着色器处理之后,下一个阶段就是图元装配(将顶点数据计算成一个个图元) ,在这个阶段会执行裁剪,透视分割和视口变换操作。图元类型和顶点索引确定将被渲染的单独图元。其主要作用是将顶点着色器输出值执行裁剪、透视分割、视⼝变换后进入光栅化阶段。

光栅化

光栅化就是将图元转化成一组二维片段的过程,而这些转化的片元将由片元着色器进行处理。

片元着色器

片元着色器主要用于计算颜色,获取纹理值,向像素点中填充颜色值或纹理值。

varying lowp vec2 varyTextCoord; uniform sampler2D colorMap; 	void main()
{
gl_FragColor = texture2D(colorMap, varyTextCoord); 
}

OpenGL ES命令需要渲染上下文和绘制表面才能完成图形图像的绘制,渲染上下文用于存储OpenGL ES状态,绘制表面用于绘制图元的表面,它指定渲染所需要的缓存区类型。(如:颜色缓存区,深度缓存区,和模版缓存区)。OpenGL ES API并没有提供如何创建渲染上下文。iOS系统支持OpenGL ES却不支持EGL,但是苹果提供了自己的EAGL用于OpenGL ES和iOS系统之间的接口。由于OpenGL ES是基于C的API,因此它与OC的应用程序可以无缝集成。在iOS上使用OpenGL ES需要使用iOS类来设置和呈现绘画表面,并使用平台中的API来呈现其内容。