Я пытаюсь написать скрипт деформера для Maya, используя API Maya, который преобразует любую сетку в сферу, переводя ее вершины.
То, что у меня уже есть, - это деформер, который переводит каждую вершину меша в направлении его нормали с указанным количеством.Это делается с помощью приведенного ниже уравнения.
point += normals[itGeo.index()] * bulgeAmount * w * env;
Где точка - это вершина меша.normals [itGeo.index ()] - векторный массив, который представляет нормали каждой вершины.w и env должны управлять весами деформации и огибающей.
Этот код в основном делает то, что он переводит вершину в направлении нормали с указанным количеством.Хотя это работает для сферы, потому что нормали вершин сферы будут указывать на центр.Это не будет работать для других сеток, так как нормали не будут указывать на центр сетки.
float bulgeAmount = data.inputValue(aBulgeAmount).asFloat();
float env = data.inputValue(envelope).asFloat();
MPoint point;
float w;
for (; !itGeo.isDone(); itGeo.next())
{
w = weightValue(data, geomIndex, itGeo.index());
point = itGeo.position();
point += normals[itGeo.index()] * bulgeAmount * w * env;
itGeo.setPosition(point);
}
Сначала я думал, что изменение направления перемещения решит проблему.Например, если мы сможем найти вектор в направлении от центра сетки к каждой вершине и перевести его вдоль этого направления для указанного количества, это решит проблему.Вот так:
point += (Center - point) * bulgeAmount * w * env;
Где, Центр - это центр сетки.Но это не дает желаемого результата.Я также хотел бы, чтобы деформатор был настроен таким образом, чтобы пользователь мог ввести значение радиуса "r", а также изменить атрибут количества с 0 на 1, чтобы деформировать сетку из ее исходного состояния в сферическое.Так что он может выбрать значение между ними, если ее желания и сетка будут чем-то между сферой и ее первоначальной формой.
Это мой самый первый пост в stackOverflow.Я извиняюсь, если формат не соответствует ожиданиям сообщества.Буду признателен за любую помощь в этом.
Спасибо.