Render.ru

Получения веса точки. Skin

Олег Гомозов 92913

Пользователь сайта
Рейтинг
2
#1
Всем привет.
Мне нужно сделать экспортер весов точек с привязкой к костям. С макс скриптом до этого не сталкивался так что пришлось немного пошаманить и вот что получилось (Все на стадии эксперементов):


Вариант 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, что видно в листенере когда переключаем кости вручную)

Как это исправить я тоже без понятия. Надеюсь кто-нибудь сможет помочь, потомучто я в ступоре (.
 

Олег Гомозов 92913

Пользователь сайта
Рейтинг
2
#2
Пошаманил еще немного. skinOps.SelectVertices выбирает вершину но $Box01.modifiers[#Skin].Effect всегда возвращает значение веса той точки, которая была последний раз выбрана вручную мышью.
 

Savin Denis

Модератор форума
Команда форума
Рейтинг
138
#3
Информацию о весах можно получить для конкретной точки, по видимому это связанно с методом хранения информации.
По этому делаем цикл по всем точкам:

Код:
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
 

Олег Гомозов 92913

Пользователь сайта
Рейтинг
2
#4
Спасибо за помощь. Немного поправлю: в
Код:
Weight = skinOps.GetVertexWeight m i BoneID
вместо BoneID нужно ставить j т.к. функция смотрит вес по "внутреннему" ID кости для вершины.
 
Сверху