OpenGL ES(一)-OpenGL ES初探
OpenGL ES简介
OpenGL ES (OpenGL for Embedded Systems) 是以⼿和嵌⼊式为⽬标的⾼级3D图形应用程序编程接口(API). OpenGL ES 是目前智能⼿机中占据统治地位的图形API.⽀持的平台: iOS, Andriod , BlackBerry ,bada ,Linux ,Windows.
0.png
OpenGL ES允许应用程序利⽤底层图形处理器的强⼤功能。iOS设备上的GPU可以执行复杂的2D和3D绘图,以及最终图像中每个像素的复杂着⾊计算.
OpenGL ES 3.0 图形管线
1.png顶点着色器
一、顶点着色器 输入:
- 着⾊器程序—描述顶点上执⾏操作的顶点着色器程序源代码/可执⾏⽂文件
2.顶点着⾊器输入(属性) — 用顶点数组提供每个顶点的数据
3.统⼀变量(uniform)—顶点/⽚元着色器使用的不变数据 - 采样器—代表顶点着色器使用纹理的特殊统⼀变量类型
二、顶点着色器 业务:
- 矩阵变换位置
2.计算光照公式⽣成逐顶点颜色
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;
}
图元装配
顶点着⾊器之后,下一个阶段就是图元装配. 图元(Primitive): 点
,线
,三⻆形
等.
图元装配: 将顶点数据计算成一个个图元.在这个阶段会执行裁剪
、透视分割
和 Viewport变换
操作。
图元类型和顶点索确定将被渲染的单独图元。对于每个单独图元及其对应的顶点,图
元装配阶段执⾏的操作包括:将顶点着⾊器的输出值执行裁剪
、透视分割
、视口变换
后进入光栅化
阶段。
光栅化
在这个阶段绘制对应的图元(点/线/三⻆角形). 光栅化就是将图元转化成一组⼆维片段的过程.⽽这些转化的片段将由⽚元着⾊器处理.这些⼆维⽚段就是屏幕上可绘制的像素.
⽚元着⾊器/⽚段着⾊器
一、片元着⾊器/⽚段着⾊器 输入:
- 着⾊器程序—描述⽚段上执行操作的顶点着⾊器程序源代码/可执⾏⽂件
2.输⼊变量— 光栅化单元用插值为每个⽚段⽣成的顶点着⾊器输出
3.统⼀变量(uniform)—顶点/⽚元着⾊器使用的不变数据 - 采样器—代表⽚元着⾊器使⽤纹理的特殊统一变量类型.
二、⽚元着色器 业务:
- 计算颜色
- 获取纹理值
- 往像素点中填充颜色值(纹理值/颜色值)
三、片元着色器代码案例:
varying lowp vec2 varyTextCoord;
uniform sampler2D colorMap;
void main()
{
gl_FragColor = texture2D(colorMap, varyTextCoord);
}
逐⽚段操作
2.png像素归属测试
: 确定帧缓存区中位置(Xw,Yw)的像素目前是不是归属于OpenGL ES所有. 例如,如果⼀个显示OpenGL ES帧缓存区View被另外⼀一个View 所遮蔽.则窗口系统
可以确定被遮蔽的像素不属于OpenGL ES上下文.从⽽不全显示这些像素.而像素归属测试是OpenGL ES 的一部分,它不由开发者⼈为控制,⽽是由OpenGL ES 内部进行.
裁剪测试
: 裁剪测试确定(Xw,Yw)是否位于作为OpenGL ES状态的一部分裁剪矩形范围内.如果该⽚段位于裁剪区域之外,则被抛弃.
深度测试
: 输⼊⽚段的深度值进步⽐较,确定片段是否拒绝测试
混合
: 混合将新⽣成的⽚段颜⾊与保存在帧缓存的位置的颜色值组合起来.
抖动
: 抖动可用于最⼩化因为使用有限精度在帧缓存区中保存颜色值⽽产生的伪像.