3d Monogame/Xna-等距视图
我试图在Monogame中实现等距效果,到目前为止,我的视觉效果非常好,但我不确定我为视图和投影矩阵编写的代码是否正确 这就是我在相机课上学到的东西: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
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模型,这可能没什么大不了的。