GLSL 向量

GLSL 向量,着色语言中,向量可以看作是由同样类型的标量组成的,基本类型也分为 bool、int、uint 及 float 等 4 种。每个向量可以由 2 个、3 个 或者 4 个相同的标量组成,具体情况如下所示:

向量类型 说明 向量类型 说明
vec2 包含了2个浮点数的向量 bvec2 包含了2个布尔数的向量
vec3 包含了3个浮点数的向量 bvec3 包含了3个布尔数的向量
vec4 包含了4个浮点数的向量 bvec4 包含了4个布尔数的向量
ivec2 包含了2个整数的向量 uvec2 包含了2个无符号整数的向量
ivec3 包含了3个整数的向量 uvec3 包含了3个无符号整数的向量
ivec4 包含了4个整数的向量 uvec4 包含了4个无符号整数的向量

GLSL 向量

声明向量类型变量的基本语法如下:

vec2 v2;    //声明了一个vec2类型的向量
ivec3 v3;    //声明了一个ivec3类型的向量
uvec3 vu3;    //声明了一个uvec3 类型的向量
bvec4 v4;    //声明一个bvec4类型的向量

向量在着色器代码的开发中有十分重要的作用,可以很方便地存储以及操作颜色、位置、纹理坐标等不仅包含一个组成部分的量,也可能需要单独访问向量中的某个分量,基本的语法为“<向量名>.<分量名>”,根据目的的不同,主要有如下几种用法:

  • 将一个向量看作颜色时,可以使用r、g、b、a 等4个分量名,其分别代表红、绿、蓝、透明度4个色彩通道,具体用法如下:
aColor.r = 0.6;    //给向量aColor的红色通道分量赋值
aColor.g = 0.8;    //给向量aColor的绿色通道分量赋值

若向量是四维的,则可以使用的分量名为:r、g、b、a;若向量是三维的,则可以使用的分量名为r、g、b;若是二维的,则仅可以使用r、g两个分量名。

  • 将一个向量看作位置时,可以使用x、 y、 z、 w 等 4 个分量名,分别代表 x 轴、y 轴、z轴分量及 w 值,具体用法如下:
aPostion.x = 67.2;    //给向量 aPostion 的x分量赋值
aPostion.y = 48.3;    //给向量aPostion 的z分量赋值
  • 将一个向量看作纹理坐标时,可以使用s、t、p、q 等4个分量名,分别代表纹理坐标的不同分量,具体用法如下;
aTexCoor.s = 0.65;    //给向量 aTexCoor 的s 分量赋值
aTexCoor.t = 0.34;    //给向量 aTexCoor 的t分量赋值

访问向量中的各个分量不但可以采用 “.”加上不同的分量名,还可以将向量看作一个数组,用下标来进行访问,具体用法如下:

aColor[0] = 0.6;    //给向量aColor的红色通道分量赋值
aPostion[2] = 48.3; //给向量aPostion的z轴分量赋值
aTexCoor[1] = 0.34; //给向量aTexCoor的t分量赋值

其实,在 C 语言中也可以通过自己构建结构体的方式来支持向量,但进行向量的运算时必须由 GPU 将每个分量依次顺序计算(3个分量就需要计算3次),效率不高。而着色器中向量则不同,它由硬件原生支持,进行向量的运算时是各分量进行一次完成(n个分量只需要一次计算),效率大大提高。

赞(1)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址