OpenGL ES 图形管道Apple OpenGL ES documentation
OpenGL ES 架构
Apple 的解释:这个开放图形库(OpenGL)用于可视化2D和3D数据的。 它是一个多用途的开放标准图形库,支持2D和3D数字内容创建,机械和建筑设计,虚拟样机,飞行模拟,视频游戏等应用程序。 您可以使用OpenGL配置3D图形管线并将数据提交给它。 对顶点进行变换和光照,将其组装为图元,并进行栅格化以创建2D图像。 OpenGL旨在将函数调用转换为可发送到基础图形硬件的图形命令。 由于此底层硬件专用于处理图形命令,因此OpenGL绘制通常非常快。
OpenGL for Embedded Systems(OpenGL ES)是OpenGL的简化版本,它消除了冗余功能,从而提供了一个更易于学习且更易于在移动图形硬件中实现的库。
顶点着色器
- 1.着色器程序是描述顶点上执行操作的顶点着色器程序源代码or可执行文件
- 2.顶点着色器输入Attribute(属性)是用顶点数组提供每个顶点的数据
- 3.统一变量(Uniform)是顶点、片元着色器使用的不变数据
- 4.采样器是代表顶点着色器使用纹理的特殊统一变量类型
顶点着色器场景
- 1.矩阵变换位置
- 2.计算光照公式生成逐顶点颜色
- 3.生成or变换纹理坐标
总结:它可以用于执行自定义计算,实现新的变换、照明,或者 传统的固定功能所不能实现的基于顶点的效果
- Example
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变换操作
- 图元和顶点所确定的即是将被渲染的单独图元。对于每个单独图元及其对应的顶点,图元装配阶段执行的操作有 —— ①将顶点着色器输出值进行裁剪 ②透视分割 ③视口变换 ④进入光栅化
光栅化
该阶段将对应的图元(点、线、三角形)进行光栅化,把图元转化成一组二维片段。这些二维片段就是在屏幕上可以绘制的像素,它们将由片元着色器处理。
片元着色器(片段着色器)
- 1.着色器程序是描述顶点上执行操作的片元着色器程序源代码or可执行文件
- 2.输入变量是光栅化单元用插值为每个片元生成的顶点着色器的输出结果
- 3.统一变量(Uniform)是顶点、片元着色器使用的不变数据
- 4.采样器是代表顶点着色器使用纹理的特殊统一变量类型
片元着色器场景
- 1.计算颜色
- 2.获取纹理值
- 3.往像素点中填充颜色值(纹理值/颜色值)
总结:它可用于图元、视频、图形中每个像素的颜色填充。比如给视频添加滤镜,实际上就是给视频中每个图元的像素点颜色填充进行修改
varying lowp vec2 varyTextCoord;
uniform sampler2D colorMap;
void main(){
//经过片元着色器对某一个像素点进行处理之后的结果
gl_FragColor = texture2D(colorMap,varyTextCoord);
}
逐片段操作
逐片段操作流程- 其中除
片段数据
、帧缓存区
可代码开发操作外,其他都是调用API传递参数完成的。
网友评论