Всем привет.
Мне нужно сделать экспортер весов точек с привязкой к костям. С макс скриптом до этого не сталкивался так что пришлось немного пошаманить и вот что получилось (Все на стадии эксперементов):
Вариант 1:
k= skinOps.GetNumberVertices $Box01.modifiers[#Skin]
l= skinOps.GetNumberBones $Box01.modifiers[#Skin]
for i=1 to k do (
for j=1 to l do (
m=skinOps.GetVertexWeight $Box01.modifiers[#Skin] i j
print m
)
)
Тут возникает проблем в том что цикл прирывается когда jая кость не действует на iую вершину, т.е. вес равен 0.
По идее нужно проверять влияет ли кость на вершину но нужную функцию я так и не нашел.
Вариант 2:
k= skinOps.GetNumberVertices $Box01.modifiers[#Skin]
l= skinOps.GetNumberBones $Box01.modifiers[#Skin]
for i=1 to k do (
for j=1 to l do (
skinOps.SelectVertices $Box01.modifiers[#Skin] i
skinOps.SelectBone $Box01.modifiers[#Skin] j
m=skinOps.GetBoneName $Box01.modifiers[#Skin] j 1
print m
print $Box01.modifiers[#Skin].Effect
print
)
)
Тут мы смотрим сколько всего вершин и костей в модели а затем в цикле выбираем кость и вершину и выводим значение. Тут проблема в том что кость выбирается правильно но вес точки остается тем же что и для первой, т.е. получается чтото такое:
Bone1 0.665
Bone2 0.665 ( а должно быть 0.335, что видно в листенере когда переключаем кости вручную)
Как это исправить я тоже без понятия. Надеюсь кто-нибудь сможет помочь, потомучто я в ступоре (.
Пошаманил еще немного. skinOps.SelectVertices выбирает вершину но $Box01.modifiers[#Skin].Effect всегда возвращает значение веса той точки, которая была последний раз выбрана вручную мышью.
Информацию о весах можно получить для конкретной точки, по видимому это связанно с методом хранения информации.
По этому делаем цикл по всем точкам:
obj = $
m = obj.modifiers[#Skin]
nv = skinOps.GetNumberVertices m
--//for i = 1 .. nv
_
nw = skinOps.GetVertexWeightCount m i -- количество весов дл_ вертекса
--//for j = 1 .. nw
BoneID = skinOps.GetVertexWeightBoneID m i j -- Номер кости в списке Skin
Weight = skinOps.GetVertexWeight m i j
--// End for j = 1 .. nw
--// End for i = 1 .. nv
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
Олег Гомозов
Мне нужно сделать экспортер весов точек с привязкой к костям. С макс скриптом до этого не сталкивался так что пришлось немного пошаманить и вот что получилось (Все на стадии эксперементов):
Вариант 1:
k= skinOps.GetNumberVertices $Box01.modifiers[#Skin] l= skinOps.GetNumberBones $Box01.modifiers[#Skin] for i=1 to k do ( for j=1 to l do ( m=skinOps.GetVertexWeight $Box01.modifiers[#Skin] i j print m ) )Тут возникает проблем в том что цикл прирывается когда jая кость не действует на iую вершину, т.е. вес равен 0.По идее нужно проверять влияет ли кость на вершину но нужную функцию я так и не нашел.
Вариант 2:
Тут мы смотрим сколько всего вершин и костей в модели а затем в цикле выбираем кость и вершину и выводим значение. Тут проблема в том что кость выбирается правильно но вес точки остается тем же что и для первой, т.е. получается чтото такое:
Bone1 0.665
Bone2 0.665 ( а должно быть 0.335, что видно в листенере когда переключаем кости вручную)
Как это исправить я тоже без понятия. Надеюсь кто-нибудь сможет помочь, потомучто я в ступоре (.
Олег Гомозов
Savin Denis
По этому делаем цикл по всем точкам:
Олег Гомозов
Savin Denis