Клапауций
> void quaternion_fill_opengl_rotation_matrix(quaternion q, GLfloat * m)
Длинновато как-то. У меня так:
operator matrix4<T>() const { const T l = x*x+y*y+z*z+w*w; return matrix4<T>( l-2*( y*y+z*z), 2*( x*y-w*z), 2*( x*z+w*y), 0, 2*( x*y+w*z), l-2*( x*x+z*z), 2*( y*z-w*x), 0, 2*( x*z-w*y), 2*( y*z+w*x), l-2*( x*x+y*y), 0, 0, 0, 0, 1); }
gammaker
> Но так как ты используешь OpenGL 1.x, то вряд ли у тебя используется какая-то
> математическая библиотека. Поэтому советую взять GLM.
Ну, математическая библиотека это, наверное, слишком громко сказано.
Просто это парочка Quaternion.h и Quaternion.cpp(+матрицы с векторами, что собсно есть мелочь) где всё есть необходимое. Этими хедерами завален весь инет с его хитхабами.
gammaker
> Я, используя кватернион, часто просто считаю, как будто это ортонормированная матрица поворота 3x3
Вот-вот, но перед тем как сделать Q -> M(поворота), мне интересно бы узнать способы организации хранения, преобразования и вообще, как правильно делать всю кухню внутри самих кватернионов, кол-во которых будет определяться количеством вращений самого объекта.
gammaker
> Длинновато как-то. У меня так:
первым делом, первым делом бабы-кони-раздолье_в_пути, ну, а оптимизация чуть по позже.
Клапауций
> а оптимизация чуть по позже.
Ну в общем-то я и не оптимизировал ничего. Стащил просто откуда-то, по-моему как раз из GLM. Правда там вместо l была единица, то есть они видимо считают кватернион нормированным.
Клапауций
> как правильно делать всю кухню внутри самих кватернионов, кол-во которых будет определяться количеством вращений самого объекта.
Еще раз повторю, "количество вращений" объекта не может быть больше 1.
В противном случае ты делаешь что-то не так.
В общем, судя по всему, тебе еще рано заниматься кватернионами.
К тому же, кватернионы плохо подходят для решения твоих тестовых задач.
Нормальная задача для обучения кватернионам — это, например, физически корректный полет космического корабля.
}:+()___ [Smile]
> Еще раз повторю, "количество вращений" объекта не может быть больше 1.
> В противном случае ты делаешь что-то не так.
Есть Голова.
Она может крутиться на шее вокруг вертикальной оси. Это РАЗ. Заводим сюда кватернион.
Далее голова может ещё кивать. Это два. Заводим на этот кивок второй кватернион.
На каждый фрейм фиксируем эти два кватерниона композицией в один кватернион, используя соответствующее преобразование.
Последний этап, передаём кватернион в шейдер или тому подобное). Версия огла сейчас для меня значение не имеет.
> К тому же, кватернионы плохо подходят для решения твоих тестовых задач.
скорее учебные чем тестовые.}:+()___ [Smile]
> тебе еще рано заниматься кватернионами
знаем мы, сначала рано, а потом БАХ и уже поздно...
Тема в архиве.