我的github

‌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

posted on 2024-12-13 10:29  XiaoNiuFeiTian  阅读(0)  评论(0编辑  收藏  举报