【发布时间】:2015-11-09 07:44:52
【问题描述】:
是否可以从枚举 ENodeId 中获取关联的 FbxNode ?
例如,如果我想从 Character::eLeftHand 获取 FbxNode
我尝试使用Character::GetCharacterLink(ENodeId, FbxCharacterLink)
然后通过调用FbxCharacterLink::mNode从FbxCharacterLink提取FbxNode
但是,对于大多数 ENodeIds,此函数返回 False,因此不会创建 FbxCharacterLink。
character = myScene.GetCharacter(0)
lefthand = character.eLeftHand
lefthand_node = FbxCharacterLink()
character.GetCharacterLink(lefthand, lefthand_node) # False
lefthand_node = lefthand_node.mNode
当我在 Motionbuilder 中使用 Python 和 Pyfbxsdk 编写脚本时,非常简单,无论骨架对象如何命名,我都可以得到它的 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',
...
})
【问题讨论】:
-
这是一个 c++ 还是 python 问题? c++ 的 FBX SDK 声明 GetCharacterLink(..) 和 FindCharacterLink(..) 的参数集完全不同。见docs.autodesk.com/FBX/2014/ENU/FBX-SDK-Documentation/…。您可以简单地通过递减层次结构并在每个子 FBXNode 处调用 GetName() 来提取节点名称。但我不确定这是否能解决您的问题。
标签: python c++ autodesk fbx motionbuilder