加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 13:06:48 所属栏目:Python 来源:网络整理
导读:是否可以从枚举ENodeId获取关联的FbxNode? 例如,如果我想从Character :: eLeftHand获取FbxNode 我试着使用Character :: GetCharacterLink(ENodeId,FbxCharacterLink) 然后只需调用FbxCharacterLink :: mNode从FbxCharacterLink中提取FbxNode 但是,此函数返
是否可以从枚举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))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读