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)

3 つの行列が生成されました。この記事では、それらを乗算する必要があると書かれていますmatx * maty * matz。しかし、これmat4は単なるfloat[16]であり、組み合わせる方法がわかりません。

4

3 に答える 3

1

あなたが参照する記事の行列の章には、行列の乗算の式があります。また、行列の乗算(およびその他のクールなもの)にoperator *を使用する場合は、glmをチェックできます。

于 2012-12-26T12:49:05.827 に答える
0

参照した記事の関数"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配列を使用した行列の乗算は、3つのネストされたforループで実行できます。mat4タイプの同様の解決策は、演習として残されています。わかった?

于 2012-12-26T23:48:40.357 に答える
0

私の意見では、この記事を読む必要があります。

OpenGL 変換

複雑な操作では、それを完全に理解することが重要です。

于 2012-12-26T22:33:56.057 に答える