OpenGL ES--初探
一、OpenGL ES简介
OpenGL ES (OpenGL for Embedded Systems) 是以手持和嵌入式为目标的⾼级3D图形应 用程序编程接口(API)。OpenGL ES 是目前智能⼿机中占据统治地位的图形API支持的平台:iOS、Andriod、BlackBerry、bada、Linux、Windows。
OpenGL for Embedded Systems(OpenGL ES)是OpenGL的简化版本,它消除了冗余功能,提供了一个既易于学习⼜更易于在移动图形硬件中实现的库。
二、渲染流程中关键步骤
OpenGL ES渲染流程与OpenGL基本相同,本文不再赘述。本文着重介绍顶点着色器与片元着色器。因为在可编程管线中,我们只操作顶点着色器与片元着色器。
1.顶点着色器
1.1 顶点着⾊色器输入
1.着⾊器程序—描述顶点上执行操作的顶点着⾊器程序源代码/可执行文件 ;
2.顶点着⾊器输入(属性) — ⽤顶点数组提供每个顶点的数据;
3.统一变量(uniform)—顶点/片元着⾊器使用的不变数据;
4.采样器—代表顶点着⾊器使⽤纹理的特殊统一变量类型。
1.2 顶点着色器业务
1.矩阵变换位置;
2.计算光照公式生成逐顶点颜⾊;
3.生成/变换纹理坐标。
总结: 它可以⽤用于执行⾃定义计算,实施新的变换,照明或者传统的固定功能所不允许的基于顶点的效果。
1.3 顶点着色器相关代码
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;
}
2.片元着色器
2.1⽚元着⾊器输入
1.着⾊器程序—描述⽚段上执行操作的顶点着色器程序源代码/可执行文件;
2.输入变量— 光栅化单元用插值为每个⽚段生成的顶点着色器输出;
3.统⼀变量(uniform)—顶点/片元着色器使用的不变数据;
4. 采样器—代表片元着色器使用纹理的特殊统一变量类型。
2.2 ⽚元着⾊器相关代码
varying lowp vec2 varyTextCoord;
uniform sampler2D colorMap;
void main()
{
gl_FragColor = texture2D(colorMap, varyTextCoord);
}
2.3⽚元着⾊器业务
1.计算颜色;
2.获取纹理值;
3.往像素点中填充颜⾊值(纹理值/颜⾊值)。
总结: 它可以用于图片/视频/图形中每个像素的颜色填充(⽐如给视频添加滤镜,实际上就是将视频中每个图⽚的像素点颜色填充进行修改。
3.逐片段操作
- 像素归属测试:确定帧缓存区中位置(Xw,Yw)的像素⽬前是不是归属于OpenGL ES所有。例如,如果⼀个显示OpenGL ES帧缓存区View被另外一个View 所遮蔽,则窗⼝系统;可以确定被遮蔽的像素不属于OpenGL ES上下文。从而不全显示这些像素.而像素归属测试是OpenGL ES 的⼀部分,它不由开发者开人为控制,而是由OpenGL ES 内部控制;
- 裁剪测试:裁剪测试确定(Xw,Yw)是否位于作为OpenGL ES状态的⼀部分裁剪矩形范围 内。如果该片段位于裁剪区域之外,则被抛弃;
- 深度测试:输入⽚段的深度值进行比较,确定片段是否拒绝测试;
- 混合:混合将新生成的⽚段颜色与保存在帧缓存的位置的颜色值组合起来;
- 抖动:抖动可用于最小化因为使⽤有限精度在帧缓存区中保存颜⾊值而产⽣的伪像。