0

指定された範囲内でカメラをピッチングしようとして問題が発生しました。現在、私のカメラは制約なしにモデルの周りをピッチングできます。Y軸を6から36の範囲に制限しようとしましたが、ピッチングを続けると、Z軸はカメラを前方に動かし続けます。

コントローラーのサムスティックを使用して動きを制御しています。最終的に、私がやろうとしているのは、「ターゲット(モデル)に対するカメラの角度が私の限界の角度よりも大きい場合は、ピッチが大きくなるかどうかに関係なく、カメラを限界に保ちます(人がサムスティックを押し続けているか、ダウン)が適用されます。」

注:これは3人称カメラです

    public void cameraPitch(float pitch)
    {  
        cameraDirection = ModelLoad.CameraPos - ModelLoad.camTarget;
        axisPitch = Vector3.Cross(Vector3.Up, cameraDirection);

        // pitch constrained to model's orientation
        axisPitch.Normalize();

        ModelLoad.CameraPos = Vector3.Transform(cameraDirection,
            Matrix.CreateFromAxisAngle(axisPitch, pitch)) + ModelLoad.camTarget;

        if (ModelLoad.camPos.Y > 36.0f)
        {
            ModelLoad.camPos.Y = 36.0f;
        }

        if (ModelLoad.camPos.Y < 6.0f)
        {
            ModelLoad.camPos.Y = 6.0f;
        }
    }
4

1 に答える 1

0

空間内のカメラの X または Y 位置とは何の関係もありません。この問題を解決するには、カメラのピッチの総量をこのModelLoadオブジェクト内に保存するか、それが実際に持続できる他の場所に保存する必要があります。次に、マトリックス変換をカメラの位置ベクトルに適用する前に、この値を確認してください。実際には、そのようなことを行う前に確認してください...はい、現在のピッチ量が 36 に等しい場合は、何もせずにメソッドを終了します。そうでない場合は、カメラを回転させ、この新しい金額を合計に追加することを忘れないでください。

Matrix.CreateFromAxisAngleよく覚えていませんが、 に渡す角度はラジアンでなければならないと思いますよね? したがって、36 をチェックするのではなく、ラジアンに変換された 36 をチェックしてください。(知らないふりをしてください笑)

于 2012-10-16T07:17:29.437 に答える