0

所以我正在学习将 3D 与 XNA 结合使用,以便在我的下一个项目中使用。我需要一种放大/缩小的方法。经过搜索,我发现改变视野是一个相当令人满意的方法。

但是,我遇到的问题是,在高 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 回答