所以我正在学习将 3D 与 XNA 结合使用,以便在我的下一个项目中使用。我需要一种放大/缩小的方法。经过搜索,我发现改变视野是一个相当令人满意的方法。
但是,我遇到的问题是,在高 FOV(相当缩小)下,模型垂直拉伸的程度超出了我可以容忍的程度。如果这有帮助,我的相机在模型上方(俯视图)。
那么,如何解决拉伸问题?如果这是 FOV 的副作用,还有哪些其他缩放解决方案?
视场作为缩放解决方案不合适......
您应该使用 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);
尝试使用它来缩放 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
}
}