0

物事を誤解しているのか、単に疲れているのかはわかりません。以下の 2 行のコードを考えてみましょう。

GLKMatrix4 projection = GLKMatrix4Translate(_perspective, 0, 0, -5);
GLKMatrix4 projection = GLKMatrix4Multiply(_perspective, GLKMatrix4MakeTranslation(0, 0, -5));    

私はそれらが同等であることを期待していました。しかし、そうではありません。GLKMatrix4Translate のソースは次のとおりです。

static __inline__ GLKMatrix4 GLKMatrix4Translate(GLKMatrix4 matrix, float tx, float ty, float tz)
{
    GLKMatrix4 m = { matrix.m[0], matrix.m[1], matrix.m[2], matrix.m[3],
                     matrix.m[4], matrix.m[5], matrix.m[6], matrix.m[7],
                     matrix.m[8], matrix.m[9], matrix.m[10], matrix.m[11],
                     matrix.m[0] * tx + matrix.m[4] * ty + matrix.m[8] * tz + matrix.m[12],
                     matrix.m[1] * tx + matrix.m[5] * ty + matrix.m[9] * tz + matrix.m[13],
                     matrix.m[2] * tx + matrix.m[6] * ty + matrix.m[10] * tz + matrix.m[14],
                     matrix.m[15] };
    return m;
}

ただし、最後の行は次のようになると予想していました。

matrix.m[3] * tx + matrix.m[7] * ty + matrix.m[11] * tz + m[15];

私は正しいですか、それとも疲れた霧の中にいますか?

4

1 に答える 1

0

おっしゃるとおり、翻訳にバグがあるに違いありません。m[15] は常に変更されないため、Translate 関数の代わりに MakeTranslation+Multiply を使用します。

于 2012-12-04T14:51:29.040 に答える