Pitch Yaw Roll накопление OpenGL - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь внедрить шаг тангажа рыскания для визуализации камеры тангажа тангажа вокруг глаз более чем на 360 градусов, как в Maya, Blender, Unreal Engine, Unity и т. Д. Все это приложение может отображать углы в графическом интерфейсе более 360 градусов и не иметь никаких Проблемы с блокировкой карданного подвеса.

текущий псевдокод;

Quaternion rotation; //relative (local rotation)
Quaternion parentRotation;
    //it is psevdo code where we calculate delta angle that user generate on current frame by mouse
void SetDeltaWorldRotationFromUserInput(Quaternion value)
{
    SetWorldRotation(value);
}

void SetWorldRotation(Quaternion value)
{
    SetLocalRotation(parentQuaternion.inverted() * value); //get/set local rotation
}

void SetLocalRotation(Quaternion value)
{
    rotation = value; //this we save new local rotation but i want to save somehow more then 360 degree 
    auto eulersForGui = value.toEulers(); //it is current eulers but i want to accumulate and show in gui accumulate rotation. like currentRotation + delta or somehow

    auto deltaEulers = (value * rotation.inverted()).toEulers(); //i can get delta eulers but i can't add it to euelers and don't know what i need to do with this value

}

1 Ответ

0 голосов
/ 25 января 2019

Я оставил ссылку в разделе комментариев на ваш вопрос. Однако, как быстрый ответ на вашу проблему, я думаю, что эта цитата с этой веб-страницы должна указать вам правильное направление:

"Последовательность вращений может быть представлена ​​серией кватернионов, умноженных вместе, производя один результирующий кватернион, который кодирует объединенные вращения."

Вышеприведенная цитата может относиться либо к нескольким кватернионам, каждый из которых вращается вокруг своей оси для получения комбинированного вращения в 3D, либо к нескольким поворотам вокруг одной и той же оси, которые накапливаются в одном вращении, которое составляет более 360 градусов.

...