【问题标题】:Odd geometry with 3D models XNA + Blender带有 3D 模型的奇数几何 XNA + Blender
【发布时间】:2013-08-29 20:19:12
【问题描述】:

好的,如果没有图片,这很难解释。我在 Blender 中制作了一个非常有限的 glock 模型,其中一个挤压立方体构成了底座,一个缩放立方体构成了桶。 在 Blender 中,它看起来不错:

但是,在将模型导出为 .fbx 并将其加载到编译器后,结果如下:

我不知道到底发生了什么。模型上的所有东西都经过正确的 UV 映射并且坐标正确,看起来翻译是.. off..

这是我的 drawModel 代码:

private void DrawModel(Model model, Matrix world, Matrix view, Matrix projection)
{
    foreach (ModelMesh mesh in model.Meshes)
    {
        foreach (BasicEffect effect in mesh.Effects)
        {
            effect.EnableDefaultLighting();                   
            effect.World = world;
            effect.View = view;
            effect.Projection = projection;
        }
        mesh.Draw();
    }
}

任何指针都会有所帮助!

编辑:应用旋转、位置和缩放后,我能够将它们置于正确的位置,但为什么它看起来是透明的?

感谢大家的帮助!

【问题讨论】:

  • 您是否在 Blender 中应用了旋转/缩放/平移?您需要在导出之前执行此操作,以便导出的模型能够获取新的位置/比例/方向。
  • 我不认为这是绘图的问题,代码看起来是正确的,你在 Blender 中做错了。
  • 我添加了比例,但我认为我忽略了翻译

标签: c# xna


【解决方案1】:

正如 Nikola 所提到的,在更高版本的 Blender 中,它们具有适当的 XNA 支持。

这是我在导出模型时选择的设置的屏幕截图:

【讨论】:

    【解决方案2】:

    为什么会这样: 您的深度缓冲区未启用,因此当您的 GPU 先绘制枪管,然后是枪托/手柄时,手柄会绘制在枪管顶部,即使它的某些部分应该是不可见的,因为它们会被桶。

    如何解决: 正如其他答案所建议的那样启用深度缓冲区。和/或根据与相机的距离对模型中的网格进行排序,并按从近到远的顺序绘制网格。这现在可能看起来没什么用,但是当您开始使用透明对象时,您会明白为什么这是一件值得学习的好东西。

    【讨论】:

      【解决方案3】:

      启用深度缓冲区:

            GraphicsDevice.DepthStencilState = DepthStencilStates.Default;
      

      要在 Xna 中绘制模型,您可以按照 tutorial 操作,它显示了必须如何应用骨骼变换才能使网格处于正确位置。

      【讨论】:

        猜你喜欢
        • 2018-10-31
        • 2011-02-19
        • 2019-03-07
        • 2014-03-31
        • 2011-12-22
        • 1970-01-01
        • 2012-01-06
        • 1970-01-01
        • 2013-04-03
        相关资源
        最近更新 更多