我有一个骨骼名称(例如Bone002
),我想获取它的骨骼ID(不是皮肤列表中的索引,而是skinOps.SetVertexWeights
中所需的ID)。< / p>
我知道反向操作看起来像这样:
skinMod = $.modifiers[#skin]
boneListIndex = (skinOps.GetVertexWeightBoneID skinMod v w)
local boneName = skinOps.GetBoneNameByListID skinMod boneListIndex 0
但是如何获得boneID
?我已经boneListIndex
和boneName
。
我假设所有骨骼都有唯一的名称。
答案 0 :(得分:3)
您使用的是哪种版本的3dsMax?我记得这里的文档比较混乱。在这种情况下,Bone_ID和vertex_bone_integer是可以互换的 - 我只是在一个简单的网格上测试,而SkinOps.GetVertexWeightBoneID和SkinOps.SetVertexWeights使用相同的骨骼索引。
如果要按名称查找,则需要按名称匹配索引。使用骨骼名称创建一个数组:
boneNames = for i=1 to (skinOps.GetNumberBones skinMod) collect (skinOps.GetBoneName skinMod i 0)
然后你可以使用自己喜欢的搜索方法并检索索引,一个简单的findItem在这里运行良好:
boneIndex = findItem boneNames "Bone002"
请注意, skinOps.GetBoneName 功能略有不足;最后一个参数用于确定是返回实际节点还是其名称 - 无论设置如何,只返回名称字符串。这意味着如果皮肤中有两个具有相同名称的骨骼,那么您必须找到一种如何获取相应节点的巧妙方法。