3

ボーン名 (例: Bone002) があり、そのボーン ID を取得したい (スキン リストのインデックスではなく、たとえば で必要な ID skinOps.SetVertexWeights)。

逆の操作は次のようになります。

skinMod = $.modifiers[#skin]
boneListIndex = (skinOps.GetVertexWeightBoneID skinMod v w)
local boneName = skinOps.GetBoneNameByListID skinMod boneListIndex 0

しかし、どうやって手に入れるのboneIDですか?私はすでに と を持っていboneListIndexますboneName

すべてのボーンには固有の名前が付いていると思います。

4

1 に答える 1

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関数は少し壊れていることに注意してください。最後のパラメーターは、実際のノードまたはその名前を返すかどうかを決定するためのものです。設定に関係なく、名前文字列のみが返されます。つまり、スキンに同じ名前のボーンが 2 つある場合、適切なノードを取得する賢い方法を見つける必要があります。

于 2014-10-31T01:27:06.487 に答える