4

我想在 XNA 中画一个模型。我已经开始在 Blender 中制作它并将其导出为 fbx 文件格式,以便内容管道可以使用它。我应该在我的 WindowsGame() 的 Draw() 方法中添加什么代码?我尝试了以下但我得到的只是一个灰色屏幕(灰色不是蓝色,这是清晰的颜色,请注意)模型是使用 content.Load 导入的,这不会引发错误,我称之为“碗” .

谁能告诉我为什么这里不起作用?

protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);
            BasicEffect b = new BasicEffect (graphics.GraphicsDevice, new EffectPool ( ));
            foreach (ModelMesh m in Bowl.Meshes)
            {
                b.View = Cam.mView;
                b.Projection = Cam.mProj;
                b.World = mWorld;
                b.EnableDefaultLighting ( );
                b.Begin ( );
                m.Draw ( );
                b.End ( );
            }

            base.Draw(gameTime);
        }

我刚刚注意到这在效率方面相当于谋杀,但我尝试了很多东西,我只需要它在优化之前工作。

4

1 回答 1

5

第一次尝试渲染某些东西时,一个非常常见的问题是相机没有看到你认为它正在看的东西。另一个可能的问题是模型的规模不是您所期望的。因此,例如,如果相机在 z 轴上 5 个单位,但模型是 10 个单位宽,那么您的相机实际上是在模型内部。

就渲染问题而言,微软在这方面有很好的文档:http: //msdn.microsoft.com/en-us/library/bb203933.aspx

您可以将此代码段用作帮助程序:

private void DrawModel(Model m)
{
    Matrix[] transforms = new Matrix[m.Bones.Count];
    float aspectRatio = graphics.GraphicsDevice.Viewport.Width / graphics.GraphicsDevice.Viewport.Height;
    m.CopyAbsoluteBoneTransformsTo(transforms);
    Matrix projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(45.0f),
        aspectRatio, 1.0f, 10000.0f);
    Matrix view = Matrix.CreateLookAt(new Vector3(0.0f, 50.0f, Zoom), Vector3.Zero, Vector3.Up);

    foreach (ModelMesh mesh in m.Meshes)
    {
        foreach (BasicEffect effect in mesh.Effects)
        {
            effect.EnableDefaultLighting();

            effect.View = view;
            effect.Projection = projection;
            effect.World = gameWorldRotation * transforms[mesh.ParentBone.Index] * Matrix.CreateTranslation(Position);
        }
        mesh.Draw();
    }
}
于 2009-06-09T17:29:26.030 回答