在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();
        }

但是这将模型绘制在屏幕的中心,而我希望它是静止的,所以我可以在同一个项目中查看其他模型。

对如何实现这一点有什么帮助吗?

在c# xna中绘制坐标处的3D模型

如果我理解你的问题:"当你移动你的相机,模型跟着"。

最有可能的是,它没有跟随,你只是移动了相机,而没有改变相机"看"的地方。你的视图矩阵要求它看(相机指向)Vector3。无论摄像机移到什么位置,都是零。这意味着如果你的模型位置没有改变,并且你的视图矩阵总是看着相同的世界位置,那么模型似乎不会改变位置。它可能会变大或变小,或者你可能会从不同的角度看到它,但它总是在屏幕上的同一个位置。这是因为你告诉相机在你的世界里总是看同一个位置。

改变相机的位置还不足以让你自由地看世界,你还必须改变相机的位置(视图矩阵的第二个参数)。

同样,最好把相机想象成只有一个视图和投影矩阵。世界矩阵应该被认为是模型的一部分(或由模型提供)。