0

我找到了一篇关于旋转矩阵的好文章:

http://db-in.com/blog/2011/04/cameras-on-opengl-es-2-x/

一切都按我的预期工作,但是:

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],我不知道如何结合。

4

3 回答 3

1

您参考的文章中的矩阵章节有一个矩阵乘法公式。如果你想使用operator*进行矩阵乘法(和其他很酷的东西),你也可以检查glm 。

于 2012-12-26T12:49:05.827 回答
0

在我看来,你应该阅读这篇文章:

OpenGL转换

彻底理解它对于复杂的操作很重要。

于 2012-12-26T22:33:56.057 回答
0

您引用的文章中的函数“matrixMultiply()”为您执行矩阵乘法并处理您正在使用的特殊一维矩阵类型 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];
}

使用二维数组的矩阵乘法可以在三个嵌套的 for 循环中完成。mat4 类型的类似解决方案留作练习。好的?

于 2012-12-26T23:48:40.357 回答