3d Monogame/Xna-等距视图

3d Monogame/Xna-等距视图,3d,xna,monogame,3d,Xna,Monogame,我试图在Monogame中实现等距效果,到目前为止,我的视觉效果非常好,但我不确定我为视图和投影矩阵编写的代码是否正确 这就是我在相机课上学到的东西: public class Camera { GraphicsDevice graphicsDevice; public Vector3 position = new Vector3(0, 0, 10); public Vector3 lookAtVector = new Vecto

我试图在Monogame中实现等距效果,到目前为止,我的视觉效果非常好,但我不确定我为视图和投影矩阵编写的代码是否正确

这就是我在相机课上学到的东西:

    public class Camera
    {
        GraphicsDevice graphicsDevice;

        public Vector3 position = new Vector3(0, 0, 10);
        public Vector3 lookAtVector = new Vector3(0, 0, 0);
        public Matrix ViewMatrix
        {
            get
            {
                var upVector = Vector3.UnitZ;

                return Matrix.CreateLookAt(Vector3.Transform(position, Matrix.CreateFromYawPitchRoll(MathHelper.ToRadians(45), MathHelper.ToRadians(35), 0)),
                    Vector3.Transform(lookAtVector, Matrix.CreateFromYawPitchRoll(MathHelper.ToRadians(45), MathHelper.ToRadians(35), 0)), 
                    upVector);
            }
        }

        public Matrix ProjectionMatrix
        {
            get
            {
                return Matrix.CreateOrthographic(50, 38, -100, 500);
            }
        }

        public Camera(GraphicsDevice graphicsDevice)
        {
            this.graphicsDevice = graphicsDevice;
        }

        public void Update(GameTime gameTime)
        {

        }
    }
当我绘制一些平铺时,会创建以下内容:

现在从我所读到的,偏航应该是45度,俯仰应该是30度,以达到我想要的效果,但是使用上面的代码,如果我将俯仰设置为30,它看起来会扭曲,所以我不得不将其提升到35度,我认为它看起来不错

我对3D编程相当陌生,所以我的方法可能不是最好的,任何建议都将非常感谢。仅供参考,我正在对视图矩阵的位置和目标向量应用变换,以便能够移动相机


提前谢谢

我不确定你的30°是从哪里来的。正确的仰角约为35.3°

如果使用
CreateLookAt
函数,则有一种更简单的方法,因为视图方向始终是立方体对角线。为此,让我们假设您的相机有一个它正在查看的
目标
位置和
视距
。然后,视图矩阵为:

Matrix.CreateLookAt(target + new Vector3(1, 1, -1) * viewDistance, target, upVector)
您可以更改对角线向量中的符号
(1,1,-1)
以匹配所需的视图。

“正确”是主观的。如果你觉得不错,那就带着它跑吧。唯一可能影响“正确性”的事情是你是否决定使用一些或一些东西。在这种情况下,你可能会希望一切都很好地配合在一起。另一方面,如果你想要所有的3D模型,这可能没什么大不了的。