Занимаюсь тут анимациями и не могу побороть один баг (а может быть и фичу, а может быть и свою глупость). Если работать с кватернионами и интерполировать их(слерпить), то все гладко идет, но если вместо кватернионов интерполировать углы, а потом уже конечный угол перевести в кватернион, то в анимациях происходит каша. Типа угол выходит за пределы 180 или -180 градусов(Эх, Кармак). Это константы где-то неравные или что?
Вот тута просиходит складывание углов анимаций. Не стал делать кватернионами, потому что зачем все время их переводить туда-сюда. Вдруг немного значения потеряется
C++ Source Code:
1
for ( int i = 0; i < m_pStudioHeader->numbones; i++, pbones++, panim++ )
2
{
3
a [ i ] += a3 [ i ] - a2 [ i ];
4
p [ i ] += p3 [ i ] - p2 [ i ];
5
6
NormalizeAngles ( a [ i ], false );
7
8
AngleQuaternion ( a [ i ], q [ i ], false );
9
}
На неоптимизированный код не обращайте внимание, делал на коленке.
Вопрос: лучше кватернионы использовать или углы? Мне надо скласть два кватерниона(фактически две анимации). Мб у кого-то есть код? Видел формулу если надо сложить два угла в виде кватернионов, то надо каждые элементы кватернионов перемножить друг на друга resultQuat=Quat1*Quat2
XaeroX медальку за это дают?
2 года ничего не делал. Да. А недавно начал делать новую систему анимаций, да и способ нашел как из ксго анимации выдернуть.
Почему нельзя интерполировать? Работает же, но с огрехами
Добавлено 29-12-2015 в 21:24:
Код теперь правильный, но все равно иногда выходит за пределы...