Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Webgl glsl中的向量矩阵乘法_Webgl - Fatal编程技术网

Webgl glsl中的向量矩阵乘法

Webgl glsl中的向量矩阵乘法,webgl,Webgl,参考号 在向量着色器中,存在mat4和vec4的乘法 attribute vec4 a_position; uniform mat4 u_matrix; void main() { // Multiply the position by the matrix. gl_Position = u_matrix * a_position; } 如何将4*4矩阵与1*4矩阵相乘? 它不应该是gl\u Position=a\u Position*u\u矩阵 有人能解释一下吗? 5.11

参考号 在向量着色器中,存在
mat4
vec4
的乘法

attribute vec4 a_position;

uniform mat4 u_matrix;

void main() {

  // Multiply the position by the matrix.

  gl_Position = u_matrix * a_position;

}
如何将4*4矩阵与1*4矩阵相乘? 它不应该是
gl\u Position=a\u Position*u\u矩阵

有人能解释一下吗?

5.11向量和矩阵运算 除了少数例外,操作是组件式的。当运算符对向量或矩阵进行操作时,它以组件方式对向量或矩阵的每个组件进行独立操作

…矩阵乘以向量,向量乘以矩阵,矩阵乘以矩阵。它们不按组件操作,而是执行正确的线性代数乘法。它们要求操作数的大小匹配

vec3 v, u;
mat3 m;

u = v * m;
相当于

u.x = dot(v, m[0]); // m[0] is the left column of m
u.y = dot(v, m[1]); // dot(a,b) is the inner (dot) product of a and b
u.z = dot(v, m[2]);
u.x = m[0].x * v.x + m[1].x * v.y + m[2].x * v.z;
u.y = m[0].y * v.x + m[1].y * v.y + m[2].y * v.z;
u.z = m[0].z * v.x + m[1].z * v.y + m[2].z * v.z;

相当于

u.x = dot(v, m[0]); // m[0] is the left column of m
u.y = dot(v, m[1]); // dot(a,b) is the inner (dot) product of a and b
u.z = dot(v, m[2]);
u.x = m[0].x * v.x + m[1].x * v.y + m[2].x * v.z;
u.y = m[0].y * v.x + m[1].y * v.y + m[2].y * v.z;
u.z = m[0].z * v.x + m[1].z * v.y + m[2].z * v.z;
或者也

u = v.x * m[0] + v.y * m[1] + v.z * m[2];

我很困惑,因为这是数学形式主义的反面。不可能被右边的矢量线相乘。所以v*m看起来更符合代数惯例,不是吗?