webGL-矢量和矩阵

249 阅读2分钟
「这是我参与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、mat422、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