Shader中的uniform和attribute的主要区别在于它们的使用范围和用途。
uniform变量
uniform变量可以在顶点着色器(Vertex Shader)和片段着色器(Fragment Shader)中共享使用,通常用于传递全局数据,如变换矩阵、光照参数、材质属性等。这些数据在着色器程序中是不可变的,即它们的值不能在着色器内部被修改。例如:
uniform mat4 viewProjMatrix;
表示投影和视图矩阵uniform vec3 lightPosition;
表示光源位置
attribute变量
attribute变量只能在顶点着色器中使用,用于传递顶点数据,如顶点坐标、法线、纹理坐标、顶点颜色等。这些数据是顶点着色器处理的基础,不能在片段着色器中使用。例如:
attribute vec4 a_position;
表示顶点位置attribute vec2 a_texCoord0;
表示纹理坐标UV
具体应用场景
- uniform变量常用于传递那些在整个渲染过程中不会改变的数据,如变换矩阵、光照参数等,这些数据在整个渲染过程中保持不变。
- attribute变量则用于传递每个顶点的具体数据,如位置、颜色、纹理坐标等,这些数据是动态的,每个顶点可能有所不同。
通过这些区别,可以更好地理解uniform和attribute在shader编程中的作用和用法。
参考:百度AI