在Monogame中不绘制的3D对象

我对3D对象的工作还很陌生。 我目前正试图让一个加载在Monogame中。 该对象本身被导入到Blender中,并作为一个fbx文件导出(这是唯一可以获得新内容管道的文件types)。

加载模型的命令在这里:

var _model = content.Load<Microsoft.Xna.Framework.Graphics.Model>("Ship"); 

而绘制它的代码是:

 public override void Draw(IDrawParameters p) { // Copy any parent transforms. Matrix[] transforms = new Matrix[_model.Bones.Count]; _model.CopyAbsoluteBoneTransformsTo(transforms); // Draw the model. A model can have multiple meshes, so loop. foreach (ModelMesh mesh in _model.Meshes) { // This is where the mesh orientation is set, as well // as our camera and projection. foreach (BasicEffect effect in mesh.Effects) { effect.EnableDefaultLighting(); effect.World = transforms[mesh.ParentBone.Index] * Matrix.CreateRotationX(_modelRotation) * Matrix.CreateRotationY(_modelRotation); effect.View = Matrix.CreateLookAt(eye, Vector3.Zero, Vector3.Up); effect.Projection = Matrix.CreatePerspectiveFieldOfView( MathHelper.ToRadians(45.0f), _aspectRatio, 1.0f, 10000.0f); } // Draw the mesh, using the effects set above. mesh.Draw(); } base.Draw(p); } 

我已经尝试了大量的绘制代码的变体,大部分来自networking。 然而,无论我尝试什么,屏幕上都没有任何东西出现 – 没有错误,但屏幕上没有任何东西。

在下面的代码中有什么具体的东西可能会导致这种情况; 或者,有没有可能的内容content.Load不起作用,但它只是没有告诉我?

UPDATE

在我的情况下,以下不止一个答案是正确的。 我遇到的第一个问题是变革:

 effect.World = transforms[mesh.ParentBone.Index] * Matrix.CreateRotationX(_modelRotation) * Matrix.CreateRotationY(_modelRotation); 

第二个问题是阿尔法标志; 这两个都一起表明,但只是因为我写了一个例程来改变眼睛的位置 – 原来的渲染是在对象内部。

我在尝试渲染天空盒时遇到类似的问题。 我的.x文件只是一个问题,但是你可能会发现一些这样的运气。 似乎alpha在渲染上被设置为0。 我在BasicEffect循环中的代码看起来像这样从XNA:

 currentEffect.LightingEnabled = false; currentEffect.PreferPerPixelLighting = false; currentEffect.World = modelTransforms[mesh.ParentBone.Index] * Matrix.CreateTranslation(position) * Matrix.CreateScale(0.05f); currentEffect.View = camera.ViewMatrix; currentEffect.Projection = camera.ProjectionMatrix; 

为了天空盒显示,我不得不添加这一行来显示它:

 currentEffect.Alpha = 1; 

它解决了我的问题。 从你在你的问题中所说的话,当你渲染时,你看不到任何东西。 和我一样,所以这可能是一个问题。

由于看起来你的模型是通过管道正确加载的,所以这是最准确的解决scheme,应该可以绘制它(我刚刚testing过)。 它使用标准的搅拌器立方体与VS2015和最新的MonoGame DirectX模板一起构建。

 public class Game1 : Game { GraphicsDeviceManager graphics; private Model model; public Game1() { graphics = new GraphicsDeviceManager(this); Content.RootDirectory = "Content"; } protected override void LoadContent() { model = Content.Load<Microsoft.Xna.Framework.Graphics.Model>("box"); } protected override void Draw(GameTime gameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); foreach (ModelMesh mesh in model.Meshes) { foreach (BasicEffect effect in mesh.Effects) { effect.EnableDefaultLighting(); effect.World = Matrix.CreateTranslation(new Vector3(0, 0, 0)); effect.View = Matrix.CreateLookAt(new Vector3(0, 0, 10), Vector3.Zero, Vector3.Up); effect.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f), 1.6f, 0.1f, 10000.0f); } mesh.Draw(); } base.Draw(gameTime); } } 

如果内容加载失败,你应该得到一个错误。 但很容易检查是否加载了一些东西。 设置一个断点并打开_model,你至less应该有一个ModelMesh,它应该包含至less一个MeshPart。

你有没有检查是否有任何效果迭代你的渲染循环? 否则,您可能需要在加载时向每个网格物体添加一个BasicEffect。