DirectX 模型文件的 C# Assimp 导入中的转换矩阵损坏?
Broken transformation matrices in C# Assimp import of DirectX model file?
我想在我的 OpenGL 引擎中使用 DirectX 模型格式。我使用 Assimp 导入模型文件。
我想使用 DirectX,因为 Assimp 导入器可以很好地识别不同的动画。如果我的 Collada 文件中有多个动画(使用 "Better Collada Exporter" for Blender 导出),Assimp 只能识别一个动画。
但是,关于导入 DirectX 模型文件,我遇到了一个奇怪的问题。视频可能会更好地描述它...
这是我将 blender 文件导出到 Collada 并通过 Assimp 导入它时的样子(正确呈现):
https://www.dropbox.com/s/jvilcem4g7vjgdp/animation_collada.mp4?dl=0
这是在我的引擎中导出到 DirectX 模型的同一个 blender 文件:
https://www.dropbox.com/s/3u6g9qmzuje5aap/animation_directx.mp4?dl=0
不知何故,我觉得动画通道中的变换矩阵似乎有点不对劲。看起来它们旋转的方向不对(或者旋转的轴不对?)
你有这方面的经验吗?我尝试将 DirectX 文件加载到 open3mod 模型查看器中,它完美地呈现了动画。
也许有一些我忘记设置的导入配置标志?
也许我的 Blender 导出设置有误?我导出:
- 右撇子
- Y 向上
干杯,感谢您的帮助。
没关系,我找到了解决方案:
Assimp 需要一个真正的 DirectX 模型文件(left-handed,y-up),所以我现在在 Blender 中的导出设置是:
Link to Blender DirectX export settings
在我的导入方法 (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
);
}
完美运行。感谢 Zebrafish 为我指明了正确的方向。
我想在我的 OpenGL 引擎中使用 DirectX 模型格式。我使用 Assimp 导入模型文件。 我想使用 DirectX,因为 Assimp 导入器可以很好地识别不同的动画。如果我的 Collada 文件中有多个动画(使用 "Better Collada Exporter" for Blender 导出),Assimp 只能识别一个动画。
但是,关于导入 DirectX 模型文件,我遇到了一个奇怪的问题。视频可能会更好地描述它...
这是我将 blender 文件导出到 Collada 并通过 Assimp 导入它时的样子(正确呈现):
https://www.dropbox.com/s/jvilcem4g7vjgdp/animation_collada.mp4?dl=0
这是在我的引擎中导出到 DirectX 模型的同一个 blender 文件:
https://www.dropbox.com/s/3u6g9qmzuje5aap/animation_directx.mp4?dl=0
不知何故,我觉得动画通道中的变换矩阵似乎有点不对劲。看起来它们旋转的方向不对(或者旋转的轴不对?)
你有这方面的经验吗?我尝试将 DirectX 文件加载到 open3mod 模型查看器中,它完美地呈现了动画。
也许有一些我忘记设置的导入配置标志? 也许我的 Blender 导出设置有误?我导出:
- 右撇子
- Y 向上
干杯,感谢您的帮助。
没关系,我找到了解决方案:
Assimp 需要一个真正的 DirectX 模型文件(left-handed,y-up),所以我现在在 Blender 中的导出设置是: Link to Blender DirectX export settings
在我的导入方法 (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
);
}
完美运行。感谢 Zebrafish 为我指明了正确的方向。