Opengl es 合并旋转矩阵?
我发现了一篇关于旋转矩阵的好文章: 一切正常,但:Opengl es 合并旋转矩阵?,opengl-es,matrix,Opengl Es,Matrix,我发现了一篇关于旋转矩阵的好文章: 一切正常,但: void matrixRotateX(float degrees, mat4 matrix) void matrixRotateY(float degrees, mat4 matrix) void matrixRotateZ(float degrees, mat4 matrix) 生成了三个矩阵,文章说我需要把它们相乘,我的意思是,如果这是C++,我可以使用 Matx*Maty*Matz ,对吗?但是这个mat4只是float[16],我不
void matrixRotateX(float degrees, mat4 matrix)
void matrixRotateY(float degrees, mat4 matrix)
void matrixRotateZ(float degrees, mat4 matrix)
生成了三个矩阵,文章说我需要把它们相乘,我的意思是,如果这是C++,我可以使用<代码> Matx*Maty*Matz ,对吗?但是这个
mat4
只是float[16]
,我不知道如何组合。你提到的这篇文章中有一个矩阵乘法公式。此外,您还可以检查是否要使用运算符*进行矩阵乘法(以及其他很酷的东西)。在我看来,您应该阅读这篇文章:
彻底理解它对于复杂的操作非常重要。在您引用的文章中,函数“matrixMultiply()”为您执行矩阵乘法,并处理您正在使用的特殊1D矩阵类型mat4:
void matrixMultiply(mat4 m1, mat4 m2, mat4 result)
{
// First Column
result[0] = m1[0]*m2[0] + m1[4]*m2[1] + m1[8]*m2[2] + m1[12]*m2[3];
result[1] = m1[1]*m2[0] + m1[5]*m2[1] + m1[9]*m2[2] + m1[13]*m2[3];
result[2] = m1[2]*m2[0] + m1[6]*m2[1] + m1[10]*m2[2] + m1[14]*m2[3];
result[3] = m1[3]*m2[0] + m1[7]*m2[1] + m1[11]*m2[2] + m1[15]*m2[3];
// Second Column
result[4] = m1[0]*m2[4] + m1[4]*m2[5] + m1[8]*m2[6] + m1[12]*m2[7];
result[5] = m1[1]*m2[4] + m1[5]*m2[5] + m1[9]*m2[6] + m1[13]*m2[7];
result[6] = m1[2]*m2[4] + m1[6]*m2[5] + m1[10]*m2[6] + m1[14]*m2[7];
result[7] = m1[3]*m2[4] + m1[7]*m2[5] + m1[11]*m2[6] + m1[15]*m2[7];
// Third Column
result[8] = m1[0]*m2[8] + m1[4]*m2[9] + m1[8]*m2[10] + m1[12]*m2[11];
result[9] = m1[1]*m2[8] + m1[5]*m2[9] + m1[9]*m2[10] + m1[13]*m2[11];
result[10] = m1[2]*m2[8] + m1[6]*m2[9] + m1[10]*m2[10] + m1[14]*m2[11];
result[11] = m1[3]*m2[8] + m1[7]*m2[9] + m1[11]*m2[10] + m1[15]*m2[11];
// Fourth Column
result[12] = m1[0]*m2[12] + m1[4]*m2[13] + m1[8]*m2[14] + m1[12]*m2[15];
result[13] = m1[1]*m2[12] + m1[5]*m2[13] + m1[9]*m2[14] + m1[13]*m2[15];
result[14] = m1[2]*m2[12] + m1[6]*m2[13] + m1[10]*m2[14] + m1[14]*m2[15];
result[15] = m1[3]*m2[12] + m1[7]*m2[13] + m1[11]*m2[14] + m1[15]*m2[15];
}
使用2D数组的矩阵乘法可以在三个嵌套for循环中完成。
mat4类型的类似解决方案留作练习。确定吗?您提供的链接不起作用。能否打开缓存版本?我不想说得太直截了当,但是:如果没有对基本线性代数的扎实理解,即如何处理向量和矩阵,就不应该处理3D编程。一些关于线性代数的本科数学教科书应该在你们的阅读清单上,以及计算机图形学数学入门。