US2S3L4——Swizzle操作符
US2S3L4——Swizzle操作符
Swizzle操作符
上节课我们学习了向量,但是我们并没有讲解如何获取向量中某元素的相关知识点
而这节课将要学习的Swizzle操作符就可以用于获取向量中元素
Swizzle操作符通常以点号( .
)的形式使用,后面跟着所需的分量顺序
对于四维向量来说,我们可以通过:向量.xyzw
或 向量.rgba
两种分量的写法来表示向量中的四个值
其中 xyzw
和 rgba
分别代表四维向量中的四个元素
在此的意义就是向量一般可以用来表示坐标和颜色
- 向量获取元素可以利用Swizzle操作符获取
- 矩阵获取元素和二维数组获取方式一样
- Swizzle操作符可以让我们对向量进行方便的操作
- 向量和矩阵在声明和获取时可以配合使用
- 高维向量或矩阵可以用低维容器装载,可以利用这个特点将4维变3维,4x4变3x3
Swizzle操作符使用方法
-
利用它来提取分量,使用
xyzw
或rgba
1
2
3
4
5
6
7
8
9fixed4 f4 = fixed4(1, 2, 3, 4);
fixed f;
//提取第一个分量
f = f4.x;
f = f4.r;
//提取第二个分量
f = f4.y;
f = f4.g;
//以此类推,第三个分量就是f4.z或f4.b,第四个分量就是f4.w或f4.a -
利用它来重新排列分量
1
2
3
4
5fixed4 f4 = fixed4(1, 2, 3, 4);
//重新排列分量
f4 = f4.yzxw; //fixed4(2, 3, 1, 4)
f4 = f4.abgr; //fixed4(4, 1, 3, 2) -
利用它来创建新向量
可以用高维向量声明低维向量(指定需要哪些分量),使用低维向量声明高维向量(需要补全相应分量)
1
2
3
4
5
6
7
8
9fixed4 f4 = fixed4(1, 2, 3, 4);
fixed f = f4.g; //2
//创建新的向量
fixed3 f3 = f4.xyz; //fixed3(4, 1, 3)
fixed2 f2 = f3.xz; //fixed2(4, 3)
fixed4 f4_2 = fixed4(f2, 4, 5); //fixed4(4, 3, 4, 5)
fixed4 f4_3 = fixed4(f2, f2); //fixed4(4, 3, 4, 3)
f4_2 = fixed4(f3, f); //fixed4(4, 1, 3, 2)
向量和矩阵的更多用法
-
利用向量声明矩阵
在声明矩阵时,我们可以配合向量来进行声明
1
2
3
4
5
6
7
8
9
10
11fixed4 f4 = fixed4(1, 2, 3, 4);
fixed4x4 f4x4 = { fixed4(1, 2, 3, 4),
fixed4(5, 6, 7, 8),
fixed4(9, 10, 11, 12),
fixed4(13, 14, 15, 16) };
fixed4x4 f4x4_2 = { f4,
f4,
f4,
f4 }; -
获取矩阵中的元素
矩阵中元素的获取和二维数组一样
1
2
3
4
5
6fixed4x4 f4x4 = { fixed4(1, 2, 3, 4),
fixed4(5, 6, 7, 8),
fixed4(9, 10, 11, 12),
fixed4(13, 14, 15, 16) };
fixed f = f4x4[0][0]; -
利用向量获取矩阵中的某一行
我们可以用向量作为容器存储矩阵中的某一行
1
2
3
4
5
6fixed4x4 f4x4 = { fixed4(1, 2, 3, 4),
fixed4(5, 6, 7, 8),
fixed4(9, 10, 11, 12),
fixed4(13, 14, 15, 16) };
fixed4 f4_2 = f4x4[3]; -
高维转低维
向量和矩阵都可以用低维存高维,会自动舍去多余元素
对于高维转低维的向量来说,会直接使用前面对应个数的元素
对于高维转低维的矩阵,会直接使用前面对应维数的元素1
2
3
4
5
6
7
8
9
10
11fixed4 f4 = fixed4(1, 2, 3, 4);
fixed4x4 f4x4 = { fixed4(1, 2, 3, 4),
fixed4(5, 6, 7, 8),
fixed4(9, 10, 11, 12),
fixed4(13, 14, 15, 16) };
fixed3 f3_2 = f4; //f4.xyz
fixed2 f2_2 = f4; //f4.xy
fixed3x3 f3x3 = f4x4; //f4x4[0,1,2][0,1,2]
fixed4x4 f2x2 = f4x4; //f4x4[0,1][0,1]
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 文KRIFE齐的博客!