webgl-访问元素

127 阅读1分钟
「这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战

分量名

类别描述
x,y,z,w用来获取顶点坐标分量
r,g,b,a用来获取颜色分量
s,t,p,q用来获取纹理坐标分量
  • 任意矢量的x,r,s分量都会返回第1个分量,以此类推
vec3 v3 = vec3(1.0,2.0,3.0)
float f;

f = v3.x; // 设f为 1.0
f = v3.y; // 设f为 2.0
f = v3.z; // 设f为 3.0

f = v3.r; // 设f为 1.0
f = v3.s; // 设f为 1.0

f = v3.w; // 报错,v3中不存在第4个元素
  • 混合:同一集合的多个分量名共同至于点运算符后,就可以从矢量中同时取出多个变量
vec2 v2;
v2= v3.xy; // 设v2为(1.0,2.0)
v2= v3.yz; // 设v2为(2.0,3.0), 可省略任意分量
v2= v3.xz; // 设v2为(1.0,3.0), 可跳过任意分量
v2= v3.yx; // 设v2为(2.0,1.0), 可逆序
v2= v3.xx; // 设v2为(1.0,1.0), 可重复任意分量

vec3 v3a;
v3a = v3.zyx;  // 设v3a为(3.0,2.0,1.0), 可使用所有分量
  • 聚合分量名也可以用来作为赋值表达式=的的左值,此时多个分量名必须属于同1个集合,比如,不能用v3.was
vec4 pisition =vec4(1.0,2.0,3.0,4,0)
position.xw = vec2(5.0,6.0) // pisition = (5.0,2.0,3.0,6.0)

[]运算符

  • 列主序读取,下标从0开始,[0]访问矩阵中的第一列元素
  • 连续使用2个[]运算符可以访问某列中的某个元素
  • 也可使用[]+分量名来访问矩阵中的元素
mat m4= mat4(1.0,2.0,3.0,4.0,
             5.0,6.0,7.0,8.0,
             9.0,10.0,11.0,12.0,
             13.0,14.0,15.0,16.0);
// 1.0 5.0 9.0 13.0
// 2.0 6.0 10.0 14.0
// 3.0 7.0 11.0 15.0
// 4.0 8.0 12.0 16.0

vec4 v4=m4[0] // m4矩阵的第一列[1.0,2.0,3.0,4.0]

float m23 = m4[1][2] // m4矩阵的第2列第3个元素  7.0

float m32 = m4[2].y // m4矩阵第3列中的第二个元素 10.0