gltf 没有在皮肤中指定骨架值是什么意思?
What does it mean when gltf does not specify a skeleton value in a skin?
阅读tinygltf的源代码我看到了这个:
struct Skin {
std::string name;
int inverseBindMatrices; // required here but not in the spec
int skeleton; // The index of the node used as a skeleton root
std::vector<int> joints; // Indices of skeleton nodes
Value extras;
ExtensionMap extensions;
// Filled when SetStoreOriginalJSONForExtrasAndExtensions is enabled.
std::string extras_json_string;
std::string extensions_json_string;
Skin() {
inverseBindMatrices = -1;
skeleton = -1;
}
DEFAULT_METHODS(Skin)
bool operator==(const Skin &) const;
};
这会让您假设骨架值是强制性的。但是,在 gltf 简单皮肤示例 json 上,我看到以下内容:
"skins" : [ {
"inverseBindMatrices" : 4,
"joints" : [ 1, 2 ]
} ],
这是 skins
数组的完整范围。因此,皮肤完全可以不指定哪个是其骨架的根节点。在那种情况下,我应该在父级处理关节数组中的哪个节点?我可以安全地假设它是 joints
列表的第一个元素吗?
From the glTF specification,skin.skeleton
是“关节层级的最近公共根或最近公共根的直接或间接父节点”。
并非所有引擎或创作工具在联合层次结构中都有“根”的概念,因此这不是必需的,但如果您的加载程序需要一个,您可以简单地选择任何作为共同祖先的节点其他关节,使用场景根本身,或者在加载时插入一个新的根。
阅读tinygltf的源代码我看到了这个:
struct Skin {
std::string name;
int inverseBindMatrices; // required here but not in the spec
int skeleton; // The index of the node used as a skeleton root
std::vector<int> joints; // Indices of skeleton nodes
Value extras;
ExtensionMap extensions;
// Filled when SetStoreOriginalJSONForExtrasAndExtensions is enabled.
std::string extras_json_string;
std::string extensions_json_string;
Skin() {
inverseBindMatrices = -1;
skeleton = -1;
}
DEFAULT_METHODS(Skin)
bool operator==(const Skin &) const;
};
这会让您假设骨架值是强制性的。但是,在 gltf 简单皮肤示例 json 上,我看到以下内容:
"skins" : [ {
"inverseBindMatrices" : 4,
"joints" : [ 1, 2 ]
} ],
这是 skins
数组的完整范围。因此,皮肤完全可以不指定哪个是其骨架的根节点。在那种情况下,我应该在父级处理关节数组中的哪个节点?我可以安全地假设它是 joints
列表的第一个元素吗?
From the glTF specification,skin.skeleton
是“关节层级的最近公共根或最近公共根的直接或间接父节点”。
并非所有引擎或创作工具在联合层次结构中都有“根”的概念,因此这不是必需的,但如果您的加载程序需要一个,您可以简单地选择任何作为共同祖先的节点其他关节,使用场景根本身,或者在加载时插入一个新的根。