我正在尝试使用 Assimp 3.1.1 加载和渲染一些装配模型所以我在 aiNode 的层次结构中标识了 aiBone。对于每个 aiBone,我都有它的转换 (TRS) wrt 到父级。
我的问题是,如何确定每根骨头的长度?假设一个连接的骨骼,这对于大多数骨骼来说都不是问题,除了叶骨骼。假设我有以下骨架结构: b0 --> b1 --> b2 其中 b0 是根骨, b2 是叶骨。我怎么知道 b2 的长度(因为我只有 b1 的转换)?
谢谢!
因此,经过进一步挖掘...... ISTM 认为没有任何隐含的方式可以知道叶骨应该在哪里终止。
以下代码注释引用自Ogre3D wiki(它不是 assimp,但我们在这里讨论的是相同的问题)。
if(numChildren == 0)
{
// There are no children, but we should still represent the bone
// Creates a bone of length 1 for leaf bones (bones without children)
// ...
}
我想您可以考虑通过计算从骨骼到您正在渲染的网格边缘的距离来尝试计算叶子骨骼的长度。尽管这可能比它的价值更麻烦。
尽管大多数 SDK 和游戏引擎将骨架定义为具有骨骼,但这是不正确的。它实际上有关节。骨骼是关节之间的隐含连接。当你这样看时,你会意识到所有的骨头都有长度,没有骨头延伸过叶关节。
用关节替换您的示例:
J0 ---B0---> J1 ---B1---> J2
B0 是 J0 和 J1 之间的骨骼,B1 是 J1 和 J2 之间的骨骼。