ПрограммированиеФорумГрафика

[OpenGL 1.5 C++] Кватернионы. Как правильно их применять? (2 стр)

Страницы: 1 2
#15
11:56, 6 янв 2016

Клапауций
> 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);
}
#16
12:04, 6 янв 2016

gammaker
> Но так как ты используешь OpenGL 1.x, то вряд ли у тебя используется какая-то
> математическая библиотека. Поэтому советую взять GLM.
Ну, математическая библиотека это, наверное, слишком громко сказано.
Просто это парочка Quaternion.h и Quaternion.cpp(+матрицы с векторами, что собсно есть мелочь) где всё есть необходимое. Этими хедерами завален весь инет с его хитхабами.


gammaker
> Я, используя кватернион, часто просто считаю, как будто это ортонормированная матрица поворота 3x3
Вот-вот, но перед тем как сделать Q -> M(поворота), мне интересно бы узнать способы организации хранения, преобразования и вообще, как правильно делать всю кухню внутри самих кватернионов, кол-во которых будет определяться количеством вращений самого объекта.

#17
12:21, 6 янв 2016

gammaker
> Длинновато как-то. У меня так:
первым делом, первым делом бабы-кони-раздолье_в_пути, ну, а оптимизация чуть по позже.

#18
16:33, 6 янв 2016

Клапауций
> а оптимизация чуть по позже.
Ну в общем-то я и не оптимизировал ничего. Стащил просто откуда-то, по-моему как раз из GLM. Правда там вместо l была единица, то есть они видимо считают кватернион нормированным.

#19
21:51, 6 янв 2016

Клапауций
> как правильно делать всю кухню внутри самих кватернионов, кол-во которых будет определяться количеством вращений самого объекта.
Еще раз повторю, "количество вращений" объекта не может быть больше 1.
В противном случае ты делаешь что-то не так.

В общем, судя по всему, тебе еще рано заниматься кватернионами.
К тому же, кватернионы плохо подходят для решения твоих тестовых задач.
Нормальная задача для обучения кватернионам — это, например, физически корректный полет космического корабля.

#20
0:05, 7 янв 2016

}:+()___ [Smile]
> Еще раз повторю, "количество вращений" объекта не может быть больше 1.
> В противном случае ты делаешь что-то не так.
Есть Голова.
Она может крутиться на шее вокруг вертикальной оси. Это РАЗ. Заводим сюда кватернион.
Далее голова может ещё кивать. Это два. Заводим на этот кивок второй кватернион.

На каждый фрейм фиксируем эти два кватерниона композицией в один кватернион, используя соответствующее преобразование.

Последний этап, передаём кватернион в шейдер или тому подобное). Версия огла сейчас для меня значение не имеет.

> К тому же, кватернионы плохо подходят для решения твоих тестовых задач.
скорее учебные чем тестовые.}:+()___ [Smile]

> тебе еще рано заниматься кватернионами
знаем мы, сначала рано, а потом БАХ и уже поздно...

Страницы: 1 2
ПрограммированиеФорумГрафика

Тема в архиве.