| 「这是我参与11月更文挑战的第9天,活动详情查看:2021最后一次更文挑战」 |
|---|
矢量和矩阵类型
| 类别 | GLSL ES 数据类型 | 描述 |
|---|---|---|
| 矢量 | vec2、vec3、vec4 | 具有2、3、4个浮点数元素的矢量 |
| ivec2、ivec3、ivec4 | 具有2、3、4个整型数元素的矢量 | |
| bvec2、bvec3、bvec4 | 具有2、3、4个布尔值元素的矢量 | |
| 矩阵 | mat2、mat3、mat4 | 22、33、4*4的浮点数元素的矩阵(分别具有4,9,16个元素) |
vec3 position; //由3个浮点数元素组成的矢量,比如(10.0,20.0,30.0)
ivec2 offset; // 由2个整形数元素组成的矢量,比如(10,20)
mat4 mvpMatrix; // 4*4的矩阵,每个元素为1个浮点数
赋值和构造
赋值运算符
=左右2边的变量值的类型必须一致,元素个数也必须相同。
专门创建指定类型的变量的函数称为构造函数,构造函数的名称和其创建的变量的类型总是一致的
vec4 positon = vec4(1.0,2.0,3.0,4.0)
矢量构造函数
- 只向构造器传入1个参数,构造器就会自动将这个参数赋值为新建矢量的所有元素
- 如果构造函数接收了不止1个参数,且参数个数<矢量元素个数,则报错
vec3 v3= vec3(1.0,2.0,3.0)
vec2 v2 = vec2(v3) //使用v3的前2个元素,将v2设置为(1,0,2.0)
vec4 v4= vec4(1.0) // v4为(1.0,1.0,1.0,1.0)
vec4 v4b = vec4(v2,v4) //v4b为(1.0,2.0,1.0,1.0)
矩阵构造函数
矩阵中元素是按照 列主序 排列的
- 使用2个vec2创建mat2对象
- 使用1个vec4对象来创建mat2对象
- 向矩阵中传入矢量和数值
- 向矩阵中
传入单个值,这样将生成一个对角线上的元素都是该数值,其它元素为0.0的矩阵 - 如果
0<传入数值数量 < 元素个数,报错
// 使用2个vec2创建mat2对象
vec2 v2_1 = vec2(1.0,3.0)
vec2 v2_2 = vec2(2.0,4.0)
mat2 m2_1 = mat2(v2_1,v2_2)
// 1.0 2.0
// 3.0 4.0
//使用1个vec4对象来创建mat2对象
vec4 v4 = vec4(1.0,2.0,3.0,4.0)
mat2 m2_2 = mat2(v4)
// 1.0 3.0
// 2.0 4.0
// 向矩阵中传入矢量和数值
mat2 m2 = mat2(1.0,5.0,v2_2)
// 1.0 2.0
// 5.0 4.0
//向矩阵中传入单个值,这样将生成一个对角线上的元素都是该数值,其它元素为0.0的矩阵
mat3 m3=mat3(1.0)
// 1.0 0.0 0.0
// 0.0 1.0 0.0
// 0.0 0.0 1.0