OpenGL ES
OpenGL ES是OpenGL的子集。是针对嵌入式设备及移动终端设备的高级3D图形应用程序,例如iOS、Android、Windows等。OpenGL ES 是跨平台的,本身不会提供窗口相关方法,需要依靠各自平台提供。
OpenGL for Embedded Systems(OpenGL ES)是OpenGL的简化版本,它消除了冗余功能,提供了了一个既易于学习又更易于
在移动图形硬件中实现的库。
苹果提供了一份iOS端的文档OpenGL ES Programming Guide
OpenGL ES架构
penGL ES允许应用程序利⽤底层图形处理器的强大功能。iOS设备上的GPU可以执行复杂的2D和3D绘图,以及最终图像
中每个像素的复杂着⾊计算。
OpenGL ES 图形管道
图形管道-官方文档Application:提供图元、图像数据。
Vertex:顶点数据的变换。
Geometry:指定顶点数据的连接方式(图元装配)、超出视口部分的裁剪。
Fragment:纹理处理 雾化处理
Framebuffer Operation(帧缓冲区):透明度混合、模板、深度测试;最后在混合,放入缓冲区等待显示。
顶点着色器 Vertex
- 着色器程序—描述顶点上执行操作的顶点着⾊器程序源代码/可执⾏行文件
- 顶点着⾊器输⼊(属性) — ⽤顶点数组提供每个顶点的数据
- 统⼀变量(uniform)—顶点/片元着色器使用的不变数据
- 采样器—代表顶点着⾊器使⽤纹理的特殊统⼀变量类型.
顶点着色器样例:
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;
}
顶点着色器的主要业务:
- 矩阵变换位置
- 计算光照公式⽣生成逐顶点颜色
- ⽣生成/变换纹理理坐标
输出的结果会存放在内建变量gl_Position、gl_PointSize
中。
图元装配
顶点着器之后,下⼀个阶段就是图元装配. 图元(Primitive): 点,线,三⻆角形等.
图元装配: 将顶点数据计算成⼀个图元.在这个阶段会执⾏裁剪、透视分割和 Viewport变换操作。
图元类型和顶点索确定将被渲染的单独图元。对于每个单独图元及其对应的顶点,图 元装配阶段执行的操作包括:将顶点着⾊器的输出值执⾏裁剪、透视分割、视⼝变换 后进⼊光栅化阶段。
光栅化
在这个阶段绘制对应的图元(点/线/三⻆形). 光栅化就是将图元转化成⼀一组二维片段的过程.⽽这些转化的⽚段将由片元着⾊器器处理.这些⼆维片段就是屏幕上可绘制的像素.
⽚段着⾊器/⽚元着⾊器 Fragment
输入主要是由3种:
- 由顶点着色器桥接传递过来的纹理坐标等
- 通过uniform通道输入统一变量,即顶点/片元着色器中使用的不变的数据
- 采样器:表示顶点着色器使用纹理的特殊统一变量类型,例如纹理就是通过采样器传递
主要业务:
- 计算颜色
- 获取纹理值
- 往像素点中填充颜色值(纹理值/颜色值)
示例:
varying:变量名需要和顶点着色器一致否则读取不到数据。
sampler2D 采样器类型
texture2D(纹理采样器,纹理坐标):获取对应位置/坐标的颜色值,简称获得纹素
输出结果gl_FragColor。
varying lowp vec2 varyTextCoord;
uniform sampler2D colorMap;
void main() {
gl_FragColor = texture2D(colorMap, varyTextCoord); }
网友评论