1

OpenGLで行列の乗算をデバッグしていて、結果の行列で実行された位置ベクトルを取得しています。

これが私のコードです:

{
    glMatrixMode(GL_MODELVIEW);
    glPushMatrix();

    glLoadIdentity();
    glRotatef(45,0.0f,1.0f,0.0f);
    glGetFloatv(GL_MODELVIEW_MATRIX, (GLfloat *)&rot);

    glLoadIdentity();
    glTranslatef(2.0f,2.0f,2.0f);
    glGetFloatv(GL_MODELVIEW_MATRIX, (GLfloat *)&trs);

    glLoadIdentity();
    glLoadMatrixf(rot);
    glMultMatrixf(trs);
    glGetFloatv(GL_MODELVIEW_MATRIX, (GLfloat *)&rottrs);

    glPopMatrix();
}

数学的な観点からすると、rottrs [12]では2xcos(45)-2xsin(45)、rottrs [14]では2xcos(45)+ 2xsin(45)を取得する必要があります。これは、rot [0] = cos(45)とrotであるためです。 [2] =-sin(45)

しかし、私はその逆をしています。デバッガーは次のことを示します。

rottrs [12] = 2.8284271

rottrs [13] = 2.0000000

rottrs [14] = 0.00000000

rottrs [15] = 1.0000000

どこが悪いのか教えていただけますか?

4

1 に答える 1

0

OpenGL はその行列を列の主要な順序でインデックス付けします。つまり、インデックスは次のようになります。

0 4 8 c
1 5 9 d
2 6 a e
3 7 b f
于 2012-12-30T16:52:45.783 に答える