我想在我的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
);
}
完美无瑕。感谢斑马鱼为我指明了正确的方向。