3

OpenGL でカメラを制御するクラスを作成しようとしています。カメラのピッチ ヨーとロールを変更するには、3 つの方法があります。メソッドは、追加する回転量として使用する float パラメータを受け取ります。

これらのメソッドのコードは、助けが必要な場所です。回転は Vector3 に格納されます。これまでのところ、私が持っているピッチ変更方法について:

void changePitch(float degrees)
{
    float rads = MathHelp::degreesToRadians(degrees);
    m_rotation.x += cos(m_rotation.y) * rads;
}

これは私が自分で得ることができる限りです。カメラは、x 軸を見下ろしているときではなく、z 軸を上または下に向けているときに、カメラが上下に見えます。z回転を追加してみました:

m_rotation.z += sin(m_rotation.y) * rads;

しかし、それはうまくいきませんでした。

4

1 に答える 1

3

カメラの方向と右を見て、上向きのupVectorlookAtVectorおよび3D ベクトルがあるとします。rightVector次に、ピッチを適切にインクリメントするには、次のように計算する必要があります。

void changePitch(angle) {
    angle = DegreeToRadian(angle);

    // Rotate lookAtVector around the right vector
    // This is where we actually change pitch
    lookAtVector = Normalize3dVector(viewDir * cos(angle) + UpVector * sin(angle));

    // Now update the upVector
    upVector = CrossProduct(rightVector, lookAtVector);
}

上記の抜粋では、任意に使用される関数の名前は一目瞭然です。

于 2013-03-05T06:26:52.487 に答える