簡體   English   中英

FBX SDK - 從角色的ENodeId獲取FbxNode

[英]FBX SDK - Get the FbxNode from an ENodeId of a Character

是否有可能得到相關FbxNode從枚舉ENodeId? 例如,如果我想從Character::eLeftHand

我嘗試使用Character::GetCharacterLink(ENodeId, FbxCharacterLink)然后通過調用FbxCharacterLink::mNodeFbxCharacterLink提取FbxCharacterLink::mNode

但是,此函數返回大多數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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM