0

そのため、次のプロジェクトで使用するために、XNA で 3D を使用する方法を学んでいます。ズームイン/ズームアウトする方法が必要です。検索した結果、視野を変更することは非常に満足のいく方法であることがわかりました。

ただし、私が直面している問題は、FOV が高い場合 (かなりズームアウトした場合)、モデルが許容できる範囲を超えて垂直方向に引き伸ばされることです。これが役立つ場合、私のカメラはモデルの上にあります (トップダウン ビュー)。

では、ストレッチを修正するにはどうすればよいでしょうか。これが FOV の副作用である場合、他にどのようなズーム ソリューションがありますか?

4

2 に答える 2

1

ズームソリューションとしての視野は適切ではありません...

Matrix.CreateLookAt を使用して、カメラのビュー トランスフォームを変更する必要があります。

あなたの射影が遠近法である場合:

      Target = What_you_want...=> Model.Position; 
      Camera.Position = Target - Camera.Forward * Zoom;
      Camera.View = Matrix.CreateLookAt( Camera.Position, Target, Camera.Up);

投影が正射投影の場合:

      Target = What_you_want...=> Model.Position; 
      Camera.Position = Target - Camera.Forward;
      Camera.View =  Matrix.CreateScale(Zoom) 
                   * Matrix.CreateLookAt( Camera.Position, Target, Camera.Up);
于 2013-08-19T16:57:42.733 に答える
0

これを使用して FOV をズームしてみてください。

   Camera.Projection = Matrix.CreatePerspectiveFieldOfView(2f * Math.Atan(Math.Tan(Camera.FieldofView / 2f) / CalculateYAspect(Camera.AspectRatio, 16f / 9f, 0) / Camera.ZoomFactor), Camera.AspectRatio, Camera.NearPlane, Camera.FarPlane)

   public float CalculateYAspect(float AspectRatio, float ConditionalAspect, int AspectAxisConstraint)
   {
       switch(AspectAxisConstraint)
       {
          default:
             if (AspectRatio < ConditionalAspect)
             {
                goto case 2
             }
             else
             {
                goto case 1
             }
          case 1:
             return ConditionalAspect / ConditionalAspect
          case 2:
             return AspectRatio / ConditionalAspect
       }
   }
于 2020-02-01T02:14:40.297 に答える