我正在使用提供视图,世界和投影的相机类绘制几个基元。有了这些,我可以移动相机,看到我的所有3个基元。问题是我现在不想在项目中添加一个3D模型,但我知道绘制一个三维模型的方法不适用于相机类。我尝试过使用:
Matrix[] transforms = new Matrix[mymodel.Bones.Count];
mymodel.CopyAbsoluteBoneTransformsTo(transforms);
foreach (ModelMesh mesh in mymodel.Meshes)
{
foreach (BasicEffect effect in mesh.Effects)
{
effect.EnableDefaultLighting();
effect.World = transforms[mesh.ParentBone.Index] *
Matrix.CreateRotationY(0.0f)
* Matrix.CreateTranslation(modelposistion);
effect.View = Matrix.CreateLookAt(cameraPosistion, Vector3.Zero, Vector3.Up);
effect.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, aspectRatio, 1.0f, 10000.0f);
}
mesh.Draw();
}
但是这会将模型绘制在屏幕的中心,而我希望它是静止的,所以我可以在同一个项目中查看其他模型。
有关如何实现这一目标的任何帮助?
答案 0 :(得分:1)
如果我理解你的问题:“当你移动相机时,模型如下”。
最有可能的是,它没有跟随,你只是移动相机而不改变相机“看着”的位置。您的视图矩阵要求它查看(要指向的摄像机)Vector3.Zero,无论相机被改变到什么位置。这意味着如果您的模型位置没有改变,并且您的视图矩阵始终在同一个世界位置,那么模型似乎不会改变位置。它可能会变大或变小,或者您可能会从不同的角度看到它,但它总是在屏幕上的同一位置。这是因为你告诉相机总是看着你世界的同一个位置。
更改相机位置不足以自由地环顾世界,您还必须更改相机所在的位置(视图矩阵的第2个参数)。
此外,最好将相机视为只有视图和投影矩阵。世界矩阵应该被视为模型的一部分(或由模型提供)。