在c# xna中绘制坐标处的3D模型
本文关键字:3D 模型 坐标 绘制 xna | 更新日期: 2023-09-27 17:51:13
我正在用相机类绘制几个原语,提供视图,世界和投影。有了这些,我可以移动相机,看到我所有的3个原语。问题是,我现在不想在项目中添加3d模型,但我所知道的绘制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();
}
但是这将模型绘制在屏幕的中心,而我希望它是静止的,所以我可以在同一个项目中查看其他模型。
对如何实现这一点有什么帮助吗?
如果我理解你的问题:"当你移动你的相机,模型跟着"。
最有可能的是,它没有跟随,你只是移动了相机,而没有改变相机"看"的地方。你的视图矩阵要求它看(相机指向)Vector3。无论摄像机移到什么位置,都是零。这意味着如果你的模型位置没有改变,并且你的视图矩阵总是看着相同的世界位置,那么模型似乎不会改变位置。它可能会变大或变小,或者你可能会从不同的角度看到它,但它总是在屏幕上的同一个位置。这是因为你告诉相机在你的世界里总是看同一个位置。
改变相机的位置还不足以让你自由地看世界,你还必须改变相机的位置(视图矩阵的第二个参数)。
同样,最好把相机想象成只有一个视图和投影矩阵。世界矩阵应该被认为是模型的一部分(或由模型提供)。