C# Assimp 导入 DirectX 模型文件时损坏的转换矩阵?



我想在我的OpenGL引擎中使用DirectX模型格式。我使用 Assimp 导入模型文件。 我想使用DirectX,因为Assimp导入器可以很好地识别不同的动画。如果我的 Collada 文件中有多个动画(使用 Blender 的"更好的 Collada 导出器"导出),Assimp 只能识别一个动画。

但是,我在导入 DirectX 模型文件时遇到了一个奇怪的问题。视频可能会更好地描述它...

当我将搅拌机文件导出到 Collada 并通过 Assimp 导入它(正确渲染)时,这就是它的外观:

https://www.dropbox.com/s/jvilcem4g7vjgdp/animation_collada.mp4?dl=0

这是我引擎中导出到 DirectX 模型的相同搅拌机文件:

https://www.dropbox.com/s/3u6g9qmzuje5aap/animation_directx.mp4?dl=0

不知何故,我认为动画频道中的转换矩阵似乎有点不对劲。看起来它们以错误的方式旋转(或在错误的轴上?

你对此有什么经验吗?我尝试将 DirectX 文件加载到 open3mod 模型查看器中,它可以完美地渲染动画。

也许我忘记设置了一些导入配置标志? 也许我的Blender导出设置是错误的?我导出:

  • 右撇子
  • Y-向上

干杯并感谢您的帮助。

没关系,我找到了一个解决方案:

Assimp 需要一个真正的 DirectX 模型文件(左撇子,y-up),所以我在 Blender 中的导出设置现在是: 链接到 Blender DirectX 导出设置

在我的导入方法(c#)中,我做到了:

if(modelfile.ToLower().EndsWith(".x"))
{
model = importer.ImportFile(modelfile, PostProcessSteps.LimitBoneWeights
| PostProcessSteps.Triangulate
| PostProcessSteps.ValidateDataStructure
| PostProcessSteps.FlipWindingOrder
| PostProcessSteps.FixInFacingNormals
);
}
else
{
model = importer.ImportFile(modelfile, PostProcessSteps.LimitBoneWeights
| PostProcessSteps.Triangulate
| PostProcessSteps.ValidateDataStructure
);
}

完美无瑕。感谢斑马鱼为我指明了正确的方向。

相关内容

最新更新