FBX 模型在 XNA 4.0 中无法正确显示

Posted

技术标签:

【中文标题】FBX 模型在 XNA 4.0 中无法正确显示【英文标题】:FBX model doesn't display correctly in XNA 4.0 【发布时间】:2014-09-11 01:39:46 【问题描述】:

我有一个 3D FBX 模型,我想在 XNA 4.0 windows 游戏中绘制它。 Here 是 FBX 查看器中的模型:

但是当我运行项目时,它会显示为this

这是我的画法:

private void DrawModel(Model model, Matrix worldMatrix, string name)
    
        Matrix[] modelTransforms = new Matrix[model.Bones.Count];
        model.CopyAbsoluteBoneTransformsTo(modelTransforms);
        foreach (ModelMesh mesh in model.Meshes)
        
            foreach (BasicEffect effect in mesh.Effects)
            
                effect.EnableDefaultLighting();
                effect.World = Matrix.CreateWorld(position, new Vector3(0, 0, 1), Vector3.Up) * worldMatrix;
                effect.View = viewMat;
                effect.Projection = projectionMat;
            
            mesh.Draw();
        
    

这是基本的绘制方法:

  protected override void Draw(GameTime gameTime)
    
        GraphicsDevice.Clear(Color.White);

        graphics.GraphicsDevice.BlendState = BlendState.Opaque;
        graphics.GraphicsDevice.DepthStencilState = DepthStencilState.Default;
        graphics.GraphicsDevice.SamplerStates[0] = SamplerState.LinearWrap;


        DrawModel(house, houseWorld, "house");


        base.Draw(gameTime);
    

感谢您的帮助

【问题讨论】:

【参考方案1】:

很可能,问题出在您的 effect.World 属性上。您通过创建一个矩阵,然后将其与worldMatrix 组合来做一些奇怪的事情。更奇怪的是,您创建了一组绝对变换 (modelTransforms),但您不使用它们。

通常看起来像这样:

effect.World = modelTransforms[mesh.ParentBone.Index] * worldMatrix;

您的Matrix.CreateWorld(position, Vector3.Backward, Vector3.Up) 看起来像是一种简单地添加一些翻译 (position) 的方式。通常,您会在将其放入 draw() 之前将位置添加到 worldMatrix。但是,以下可能对您有用:

effect.World = modelTransforms[mesh.ParentBone.Index] * worldMatrix * Matrix.CreateWorld(position, Vector3.Backward, Vector3.Up);

我把 CreateWorld() 放在最后,因为它似乎只保存翻译信息,并且使用 row majore 矩阵,你最后翻译。

【讨论】:

谢谢。我真的不知道为什么我没有使用modelTransforms。我可能已经更改了某些内容并忘记更正。无论如何,我应用了您的代码,但问题仍然存在。 (对不起,如果我的英语不好)

以上是关于FBX 模型在 XNA 4.0 中无法正确显示的主要内容,如果未能解决你的问题,请参考以下文章

使用 XNA 4.0 从 fbx 模型中提取顶点

XNA 和模型没有正确加载,或者我做错了

添加到 XNA 时 Fbx 动画模型变形

对于多个网格的 FBX 模型,网格未显示在正确位置

如何以编程方式使用 xna 为 fbx 模型设置动画

WP7 XNA 显示 3D FBX 模型