Нужно загрузить и аннимировать файл MilkS. В исходниках которые я нашел повороты работают некорректно(искажение). Вот реализация Кватерниона. Мне кажется ошибка здесь Код (Text): //Это собственно получение Кватерниона. void set( T xrot, T yrot, T zrot ) {// на вход получаем углы поворота и только(такой формат файла) T angle; T sx, sy, sz, cx, cy, cz; angle = zrot * T( 0.5 ); sz = ( T )sin( angle ); cz = ( T )cos( angle ); angle = yrot * T( 0.5 ); sy = ( T )sin( angle ); cy = ( T )cos( angle ); angle = xrot * T( 0.5 ); sx = ( T )sin( angle ); cx = ( T )cos( angle ); x = ( T )( sx*cy*cz-cx*sy*sz );// что здесь считается я не понял(оъясните если это возможно) y = ( T )( cx*sy*cz+sx*cy*sz );// т.к. q = [x1,x2,x3,x4] = [scalar,(vector)] z = ( T )( cx*cy*sz-sx*sy*cz ); w = ( T )( cx*cy*cz+sx*sy*sz ); normalize(); // особенно здесь }; //-------------------------------------------------------------------- ---------------------------------------------------- void normalize() { const T s = T( 1 ) / ( T )sqrt( x*x + y*y + z*z + w*w ); w *= s; x *= s; y *= s; z *= s; } но 1.s = cos(angle/2) скляр мы не трогаем, а здесь он участвует в расчетах 2.v = (x,y,z) * sin(angle/2) / |(x,y,z)| хотя должны быть (x,y,z) т.е. только вектор 3. q = [s,v]. реализация slerp вроде правильная. Помогите разобраться, а то уже два дня парюсь.
vito Посмотри здесь: http://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_ angles Я привык записывать кватернионы в виде матриц, так что могу и ошибаться, но по-моему q = [q<sub>0</sub>,q<sub>1</sub>,q<sub>2</sub>,q<sub>3</sub>] = [w,x,y,z]. А значит и формулы рассчетов правильные. А здесь он просто нормализуется. Тебе же кватернионы для вращений нужны, так зачем с длиной возиться.
Мне тоже кажется, что все расчеты правильные: первые три абзаца это три кватериниона вращения, потом вычисляется конечный кватернион (w,x,y,z) (умножение проверь с ручкой и листочком). Еще почитай cтатью на gamedev.ru
Спасибо. Ошибка есть. Мне кажется. Формула разложения кватерниона S(3) не соответствует таковой в релизе(помечено// что здесь считаем я не понял). При подстановке правильной формулы - результат еще хуже. Проблема здесь следующая три кватерниона(xrot,(1,0,0),yrot... Преообразовать в один для интерполяции. В данном случае использовано свойство разложения, но как то странно и все равно результат некорректный. Буду думать...
Спасибо за отличные ссылки! А то я кучу мат. литературы перелопатил, а две книги по аналитической геометрии всерьез проштудировал. И то полезно
Все получилось в лучшем виде! Всем огромное спасибо, каждая ссылка дала много полезной информации. Stiver Великопная ссылка, великолепный сайт. Благодаря этому все получилось. Еще раз благодарю за помошь.