Два кватерниона интерполируются с весами f и 1-f функцией slerp. А как интерполировать 3 и более?
Собственно, спрашиваю в связи с ошкуриванием скелетного меша. Сейчас я это делаю так: преобразую базовую позицию вершины каждым преобразованием каждой кости, а потом получаю взвешенную сумму. Далее получаю все варианты нормали, суммирую их и нормализую результат. Но ведь проще сначала получить результирующее преобразование, равное взвешенной сумме преобразований каждой кости (кватернион + сдвижка), а потом этим преобразованием обработать и вершину, и нормаль.
Но вот как взвешенно просуммировать 3-4 кватерниона (сумма всех весов, разумеется, ==1), никак не пойму. Не подскажете?
Впорос по интерполяции кватернионов
Сообщений 1 страница 5 из 5
Поделиться12009-03-31 08:29:43
Поделиться22009-03-31 14:20:03
IMHO универсальных формул просто нет, скорее всего просто построить линейную комбинацию кватернионов и нормировать
Можно пробовать еще и такой путь: slerp можно записать в таком виде
q1^(1-t)*q2^t
Соответственно можно попробовать просто взять произведение кватернионов в разных степенях
Поделиться32009-04-01 20:23:16
просто построить линейную комбинацию кватернионов и нормировать
А разве так можно? Ведь, насколько я могу понять, линейная комбинация допустима только при малых углах, когда sin(x) -> x. Собственно, в Вашей реализации slerp (которую я позволил себе с не принципиальными изменениями позаимствовать) именно так и делается.
Поделиться42009-04-01 20:47:07
Та реализация, которая приведена у меня - это классическая реализация, она работает
Нормировать просто линейную комбинацию в принципе можно, это будет несколько хуже и есть проблема, чтобы длина полученного кватерниона не обратилась в нуль.
Хотя в пнринципе такой путь возможен.
Или попробуйте произведение кватернионов в разных степенях.
Других вариантов я нигде не видел
Поделиться52009-04-04 16:32:57
Линейная комбинация с нормированием дала серьезные искажения, хотя отклонения не более чем в 3-м знаке после запятой (сравнивал позиции, вычисленные тем и другим способом).