目录
5.5 向量组件
向量中每个组件的名称都使用一个单独的字符来表示。常用的位置,颜色,或者纹理坐标向量的组件直接和几个便利的数字相关联。访问向量中的组件可以使用向量名(.)组件名的方式.
支持的组件名称如下:
{x, y, z, w} | 在访问表示点或法线的向量时很有用。 |
{r, g, b, a} | 访问表示颜色的向量时很有用。 |
{s, t, p, q} | 访问表示纹理坐标的向量时很有用 |
组件名称x,r,s在向量中是表示同一个组件的同义词.
注意,为了不和颜色向量中的r(红色)混淆,纹理向量中的第三个组件名称使用了p.
访问超出向量个数的组件会引起错误:
vec2 pos;
pos.x // 合法的
pos.z // 不合法的
组件选择语法允许通过在句点(.)之后附加其名称(来自相同的名称集)来选择多个组件。
vec4 v4;
v4.rgba; // 是一个4维向量,和直接使用v4是一样的,
v4.rgb; // is a vec3,
v4.b; // is a float,
v4.xy; // is a vec2,
v4.xgba; // 不是来自同一个名称集,所以不合法
不能超过4个组件:
vec4 v4;
v4.xyzw; // is a vec4
v4.xyzwxy; // 6个元素,不合法
(v4.xyzwxy).xy; // 不合法,内层有6个元素
vec2 v2;
v2.xyxy; // 合法,相当于一个4维向量
组件的顺序可以不同,以调整它们或复制:
vec4 pos = vec4(1.0, 2.0, 3.0, 4.0);
vec4 swiz= pos.wzyx; // swiz = (4.0, 3.0, 2.0, 1.0)
vec4 dup = pos.xxyy; // dup = (1.0, 1.0, 2.0, 2.0)
组件组符号可以出现在左值中,也可以出现在右值中。
vec4 pos = vec4(1.0, 2.0, 3.0, 4.0);
pos.xw = vec2(5.0, 6.0); // pos = (5.0, 2.0, 3.0, 6.0)
pos.wx = vec2(7.0, 8.0); // pos = (8.0, 2.0, 3.0, 7.0)
pos.xx = vec2(3.0, 4.0); // 非法 - 'x' 被赋值两次
pos.xy = vec3(1.0, 2.0, 3.0); // 非法 - vec2 和vec3不匹配
数组下标语法也可以应用于向量以提供数字索引。 所以
vec4 pos;
pos [2]指pos的第三个元素,相当于pos.z。这允许变量索引到向量,以及访问组件的通用方法。任何整数表达式都可以用作下标。第一个组件是零指数。 使用具有负值或大于或等于矢量大小的值的常量积分表达式来读取或写入向量是非法的。使用非常量表达式进行索引时,如果索引为负数或大于或等于向量的大小,则行为未定义。
注意,标量不被视为单分量向量,因此在标量上使用组件选择运算符是非法的。
版权:https://blog.youkuaiyun.com/flycatdeng/article/details/89109233