python - FBX SDK - 从角色的 ENodeId 获取 FbxNode

标签 python c++ autodesk fbx motionbuilder

是否可以从枚举 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

当我使用 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',
        ...
})

最佳答案

这对我有用

from fbx import *

for i in range(myscene.GetCharacterCount()):
    character = myscene.GetCharacter(i)
    node = character.eHips
    link = FbxCharacterLink()
    while (character.GetCharacterLink(node, link)):
        print node, link.mNode.GetName()
        node = character.ENodeId(int(node+1))

关于python - FBX SDK - 从角色的 ENodeId 获取 FbxNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32037389/

相关文章:

vbscript - getObject 函数内部如何工作?

c++ - OpenGL - 阴影贴图/深度贴图给出奇怪的结果

python - 如何使用 Maya Python API 2.0 在网格中添加边

python - 如何使用networkx图过滤具有特定属性的节点并保留路径

python - argparse 具有不同的模式

python - 如何使用urllib来填写表单和收集数据?

python - 使用 PIL 在 Python 中调整图像大小

c++ - 让 LibCurl 与 Visual Studio 2013 一起工作

c++ - 为什么我不能在声明结构时初始化结构中的 vector 成员?

3d - 物体的精确边界框