OpenGL の LookAt 関数の UP ベクトルとは何ですか? 質問する

OpenGL の LookAt 関数の UP ベクトルとは何ですか? 質問する

これはLookAt のターゲット位置は、z = 0 でも、z = 1000 でも、-1000 でも関係ありませんか?

私は試した

    gluLookAt(512, 384, 2000,
              512, 384, 0,
              0.0f, 1.0f, 0.0f);

すべて正常に動作し、3 行目 (UP ベクトル) の最後の数字を次のように変更します0.8

    gluLookAt(512, 384, 2000,
              512, 384, 0,
              0.0f, 1.0f, 0.8f);

まったく同じです...次に、3行目の最初の数字を次のように変更してみました0.8:

    gluLookAt(512, 384, 2000,
              512, 384, 0,
              0.8f, 1.0f, 0.8f);

これで、ビューは左に 45 度回転したように見えます。この UP ベクトルはどのように機能するのでしょうか?

ベストアンサー1

上方向ベクトルは、gluLookAt に提供される目と中心ベクトル間の外積を作成するために使用されます。

iOS の GLKit ヘッダーから、実装を次のように確認できます。

static __inline__ GLKMatrix4 GLKMatrix4MakeLookAt(float eyeX, float eyeY, float eyeZ, float centerX, float centerY, float centerZ, float upX, float upY, float upZ)
{
    GLKVector3 ev = { eyeX, eyeY, eyeZ };
    GLKVector3 cv = { centerX, centerY, centerZ };
    GLKVector3 uv = { upX, upY, upZ };
    GLKVector3 n = GLKVector3Normalize(GLKVector3Add(ev, GLKVector3Negate(cv)));
    GLKVector3 u = GLKVector3Normalize(GLKVector3CrossProduct(uv, n));
    GLKVector3 v = GLKVector3CrossProduct(n, u);

    GLKMatrix4 m = { u.v[0], v.v[0], n.v[0], 0.0f,
        u.v[1], v.v[1], n.v[1], 0.0f,
        u.v[2], v.v[2], n.v[2], 0.0f,
        GLKVector3DotProduct(GLKVector3Negate(u), ev),
        GLKVector3DotProduct(GLKVector3Negate(v), ev),
        GLKVector3DotProduct(GLKVector3Negate(n), ev),
        1.0f };

    return m;
}

この質問の受け入れられた答えgluLookAt を適切に使用するにはどうすればよいですか?上向きベクトルが実際に何に影響を与えるかを適切に説明します。

(gluLookAt の「上」ベクトルの背後にある直感は単純です。何かを見てください。次に頭を 90 度傾けます。あなたがいる場所は変わっていませんし、見ている方向も変わっていませんが、網膜に映る画像は明らかに変わっています。違いは何でしょうか? 頭のてっぺんが指している方向です。それが上ベクトルです。)

おすすめ記事