webgl运算

348 阅读2分钟
「这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战

webgl中不同类型数的元素规则:

矢量和浮点数的运算

vec3 v3a = vec3(1.0,2.0,3.0)
f =1.0

v3b = v3a + f   //  (2.0,3.0,4.0)
// v3b.x = v3a.x +f
// v3b.y = v3a.y +f
// v3b.z = v3a.z +f

矢量运算

v3c = v3a+v3b // (3.0,5.0,7.0)
// v3c.x = v3a.x +v3b.x
// v3c.y = v3a.y +v3b.y
// v3c.z = v3a.z +v3b.z

矩阵和浮点数的运算

矩阵和浮点数的运算发生在矩阵的每个分量上

m3b = m3a *f;
// m3b[0].x = m3a[0].x * f; m3b[0].y = m3a[0].y * f; m3b[0].z = m3a[0].z * f;
// m3b[1].x = m3a[1].x * f; m3b[1].y = m3a[1].y * f; m3b[1].z = m3a[1].z * f;
// m3b[2].x = m3a[2].x * f; m3b[2].y = m3a[2].y * f; m3b[2].z = m3a[2].z * f;

矩阵右乘矢量

矩阵右乘矢量的结果是矢量,其中每个分量都是原矢量中对应的分量,乘上矩阵对应行的每个元素的积的加和

v3b = m3a * v3a;
// v3b.x = m3a[0].x * v3a.x + m3a[1].x * v3a.y + m3a[2].x * v3a.z;
// v3b.y = m3a[0].y * v3a.x + m3a[1].y * v3a.y + m3a[2].y * v3a.z;
// v3b.z = m3a[0].z * v3a.x + m3a[1].z * v3a.y + m3a[2].z * v3a.z;

矩阵左乘矢量

矩阵右乘矢量的结果是矢量,其中每个分量都是原矢量中对应的分量,乘上矩阵对应列的每个元素的积的加和

v3b = v3a * m3a;
// v3b.x = v3a.x * m3a[0].x + v3a.y * m3a[0].y  + v3a.z * m3a[0].z;
// v3b.y = v3a.x * m3a[1].x + v3a.y * m3a[1].y  + v3a.z * m3a[1].z;
// v3b.x = v3a.x * m3a[2].x + v3a.y * m3a[2].y  + v3a.z * m3a[2].z;

矩阵于矩阵相乘

矩阵a*矩阵b = 矩阵a 对应行的每个元素 * 矩阵b 对应列的每个元素的 加和

m3c = m3a * m3b;
// m3c[0].x = m3a[0].x * m3b[0].x + m3a[1].x * m3b[0].y + m3a[2].x * m3b[0].z ;
// m3c[1].x = m3a[0].x * m3b[1].x + m3a[1].x * m3b[1].y + m3a[2].x * m3b[1].z ;
// m3c[2].x = m3a[0].x * m3b[2].x + m3a[1].x * m3b[2].y + m3a[2].x * m3b[2].z ;

// m3c[0].y = m3a[0].y * m3b[0].x + m3a[1].y * m3b[0].y + m3a[2].y * m3b[0].z ;
// m3c[1].y = m3a[0].y * m3b[1].x + m3a[1].y * m3b[1].y + m3a[2].y * m3b[1].z ;
// m3c[2].y = m3a[0].y * m3b[2].x + m3a[1].y * m3b[2].y + m3a[2].y * m3b[2].z ;

// m3c[0].z = m3a[0].z * m3b[0].x + m3a[1].z * m3b[0].y + m3a[2].z * m3b[0].z ;
// m3c[1].z = m3a[0].z * m3b[1].x + m3a[1].z * m3b[1].y + m3a[2].z * m3b[1].z ;
// m3c[2].y = m3a[0].z * m3b[2].x + m3a[1].z * m3b[2].y + m3a[2].z * m3b[2].z ;