聚合类型-----( 矩阵)
矩阵在3D开发中的作用
有一些基础的开发人员都知道,3D场景中的移位、旋转、缩放等变换都是由矩阵的运算来实现的。
因此3D场景的开发中会非常多的使用矩阵 。
矩阵类型
基本类型
|
矩阵类型
| ||
2x2的浮点数矩阵
|
3x3的浮点数矩阵
|
4x4的浮点数矩阵
| |
float
|
mat2 ( 或
|
mat3 ( 或
|
mat4 ( 或
|
|
|
|
|
如下例子
| |||
1.0, 1.0
1.0, 1.0
|
1.0, 1.0, 1.0
1.0, 1.0, 1.0
1.0, 1.0, 1.0
|
1.0, 1.0, 1.0, 1.0
1.0, 1.0, 1.0, 1.0
1.0, 1.0, 1.0, 1.0
1.0, 1.0, 1.0, 1.0
|
矩阵初始化
矩阵初始化:
1、
矩阵类型需要给出两个维度的信息
例如:
mat4*4,其中第一个值表示列数,第二个值表示行数。
2、
矩阵的构建方式
矩阵的构建方式和我们的向量类似,并且可以将它初始化为一个对角矩阵 或者 完 全填充的矩阵。对于对角矩阵 ,只需要向构造函数传递一个值,矩阵的对角线元素就设置为这个值,其他元素全部设置为0;
例如: (
对于矩阵,
OpenGL
中矩阵是列主顺序的。如果只传了一个值,则会构造成对角矩阵,其余的元素为
0.
)
m = mat3(4.0); ↓
4.0
|
0
|
0
|
0
|
4.0
|
0
|
0
|
0
|
4.0
|
当然矩阵也可以通过在构造函数中指定每一个元素的值来构建。
传入元素可以是标量和向量的集合,只要给定足够的数据就行,每一列的设置方式也遵循这样的原则,也就是说,传入的数据将
首先填充列,然后填充行
。
例如:初始化耦合3*3的矩阵
(以下三种写法效果相同)
mat3 M=mat3(1.0,2.0,3.0,
4.0,5.0,6.0,
7.0,8.0,9.0);
-----------------------------------------------------------------------------------------------------------
vec3 column1=vec3(1.0,2.0,3.0);
vec3 column2=vec3(4.0,5.0,6.0);
vec3 column3=vec3(7.0,8.0,9.0);
mat3 M=mat3(column1,column2,column3);
-----------------------------------------------------------------------------------------------------------
vec2 column1=vec2(1.0,2.0);
vec2 column2=vec2(4.0,5.0);
vec2 column3=vec2(7.0,8.0);
mat3 M=mat3(column1,3.0,
column2,6.0,
column3,9.0);
这些写法得到的效果都是:(
GLSL的矩阵 首先填充列,然后填充行
)
1.0
|
4.0
|
7.0
|
2.0
|
5.0
|
8.0
|
3.0
|
6.0
|
9.0
|