【问题标题】:Assimp loading armature from blender causing AI_SCENE_FLAGS_INCOMPLETEAssimp 从搅拌机加载电枢导致 AI_SCENE_FLAGS_INCOMPLETE
【发布时间】:2020-07-17 03:23:24
【问题描述】:

我正在开发一个使用 assimp 解析 .fbx 文件的骨骼动画系统。我想要完成的是能够加载仅包含骨架(骨架/钻机)的 .fbx 文件。然后我会将该骨架加载到我自己的数据结构中,并将对它的引用分配为网格的成员(多个网格指向相同的骨架数据)。

加载包含单个骨架(从搅拌机导出)的 .fbx 文件后,assimp 似乎可以按预期加载所有内容:

但是,AI_SCENE_FLAGS_INCOMPLETE 位似乎由于某种原因被翻转,因为我发现自己位于以下块中:

if (this->aiScene->mFlags & AI_SCENE_FLAGS_INCOMPLETE)
{
    std::string errorMessage = this->aiImporter.GetErrorString();
    std::cout << "ERROR::ASSIMP::" << errorMessage << "\n";
    std::cin.get();
    exit(EXIT_FAILURE);
}

...只有this-&gt;aiImporter.GetErrorString() 返回一个空字符串,没有提供任何反馈说明为什么会这样。

所以我的问题是......为什么只加载电枢时AI_SCENE_FLAGS_INCOMPLETE 位会被翻转为真?我应该直接忽略这一点并继续我的快乐方式,还是有一些担心的理由?

(是的,我已经加载了多个其他文件,这些文件包含没有骨架的网格和带有骨架的网格,但没有报告任何错误。似乎只有一个只包含骨架的文件才有问题。)

编辑 (调试截图)

【问题讨论】:

  • if 中有多个条件。你怎么知道AI_SCENE_FLAGS_INCOMPLETEtrue的第二个?
  • 因为有一个 aiScene 并且有一个 RootNode,因为如果它们被评估为假,我将无法成功解析任何一个元素......加上在调试器中验证......我会编辑代码块,以便其他读者更清楚。感谢您指出这一点:)
  • 对。对。调试信息会有所帮助。快照就可以了。
  • 添加了来自调试器的屏幕截图。真的没什么可看的,只是进入块,aiImporter.GetErrorString() 返回一个空字符串,如所述。

标签: c++ assimp


【解决方案1】:

我相信您应该可以放心地忽略它。该标志仅在没有加载网格时设置(如果我理解正确,这在您的情况下是故意的)。

您可以在此处查看设置该标志的条件:https://github.com/assimp/assimp/blob/7e5a0acc48efc54d7aa7900c36cd63db1fbeec9b/code/Blender/BlenderLoader.cpp#L411-L417

【讨论】:

    猜你喜欢
    • 2019-06-17
    • 2014-06-09
    • 2017-02-13
    • 2018-10-06
    • 1970-01-01
    • 2014-11-07
    • 2017-09-03
    • 2012-02-02
    • 2017-04-18
    相关资源
    最近更新 更多