输入
属性:用顶点数组提供的逐顶点数据
统一变量和统一变量缓冲区:顶点着色器使用的不变数据
采样器:顶点着色器使用的纹理的特殊统一变量类型
着色器程序:顶点着色器程序源代码或者描述在操作顶点的可执行文件
内建变量
- gl_VertexID:顶点的整数索引,highp精度
- gl_IntanceID:实例化绘图调用中图元的实例编号,整数型,highp精度
- gl_Position:输出顶点位置的裁剪坐标,浮点型,highp精度
- gl_PointSize:用于写入以像素表示的点精灵尺寸,浮点型,highp精度
- gl_FrontFacing:特殊变量,布尔变量
内建统一状态
窗口坐标范围 :唯一一个内建统一状态。gl_DepthRange给出。变量为 gl_DepthRangeParameters
内建常量:2.0与3.0规范支持的最大数量最小值不一致
3.0
const mediump int gl_MaxVertexAttribs = 16;
const mediump int gl_MaxVertexUniformVectors = 256;
const mediump int gl_MaxVertexOutputVectors = 16;
const mediump int gl_MaxVertexTextureImageUnits = 16; //顶点着色器中可使用纹理单元的最大数量最小值
const mediump int gl_MaxCombinedTextureImageUnits = 32;//顶点和片段着色器可用的纹理单元最大数量的总和最小值
2.0
const mediump int gl_MaxVertexAttribs = 8;
const mediump int gl_MaxVertexUniformVectors = 128;
const mediump int gl_MaxVaryingVectors = 8;
const mediump int gl_MaxVertexTextureImageUnits = 0;
const mediump int gl_MaxCombinedTextureImageUnits = 8;
const mediump int gl_MaxTextureImageUnits = 8;
const mediump int gl_MaxFragmentUniformVectors = 16;
const mediump int gl_MaxDrawBuffers = 1;
注:代码使用的字面值每次引用都会被计如同一边来给你存储,所以使用不止一次的字面值应该使用宏定义,这样只会被计数一次,不占用统一变量的数量。
矩阵变换
模型矩阵:物体坐标变换为世界坐标
视图矩阵:世界坐标变换为眼睛坐标
投影矩阵:眼睛坐标变换为裁剪坐标
模型-视图矩阵:无api,由应用程序实现
投影矩阵
顶点生成纹理坐标?
顶点蒙皮?游戏?
变换反馈? 粒子动画、物理学模拟?
顶点纹理,位移贴图--渲染地形或水面?