是否可以从枚举类型 ENodeId
获取关联的 FbxNode
?
例如,如果我想从 Character :: eLeftHand
获取 FbxNode
。
我尝试使用 Character::GetCharacterLink(ENodeId, FbxCharacterLink)
,
然后通过调用 FbxCharacterLink::mNode
来提取 FbxCharacterLink
中的 FbxNode
。
但是,对于大多数 ENodeId
,此函数返回 false,因此不会创建 FbxCharacterLink
。
character = myScene.GetCharacter(0)
lefthand = character.eLeftHand
lefthand_node = FbxCharacterLink()
character.GetCharacterLink(lefthand, lefthand_node) # False
lefthand_node = lefthand_node.mNode
当我在使用Python和Pyfbxsdk
在Motionbuilder中编写脚本时,无论骨架对象如何命名,都非常容易,我可以获取其FBXObject
。
m = character.GetModel(self.BodyNodeObject[o])
BodyNodeObject
是通过以下方式生成的
def BodyNodes(self):
for i in dir(FBBodyNodeId):
if i[0] == 'k':
try:
self.BodyNodeObject[BodyNodesId[i]] = getattr(FBBodyNodeId, i)
except:
pass
BodyNodesId
是一个简单的字典。
BodyNodesId = OrderedDict({
'kFBChestNodeId':'Spine1',
'kFBHeadNodeId':'Head',
'kFBHipsNodeId':'Hips',
'kFBLeftAnkleNodeId':'LeftFoot',
'kFBLeftCollarNodeId':'LeftShoulder',
'kFBLeftElbowNodeId':'LeftForeArm',
...
})