Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Кватернион в новой системе координат (6 стр)

Кватернион в новой системе координат (6 стр)

Поделиться

Страницы: 1 2 3 4 5 6

TrouyanПостоялецwww8 авг. 201715:40#75
После смены СК определитель матрицы поворота становится равен (или очень близок) -1
alexzzzzПостоялецwww8 авг. 201719:52#76
Trouyan
> получаю матрицу из кватерниона перевожу ее в другую СК(из правой в левую), и
> далее перевожу назад в кватерниоин (на данном шаге скорее всего происходит
> ошибка)... и получается ерунда....

В матрице много элементов, они могут хранить и поворот, и другую хрень тоже. В кватернионе элемента четыре, в них хранится только поворот и больше ничего. Перевод из правосторонней СК в левостороннюю ― это НЕ ПОВОРОТ.

Правка: 9 авг. 2017 0:39

TrouyanПостоялецwww10 авг. 201712:33#77
Заметил следующую ситуацию... располагаю сенсор на горизонтальном столе, начинаю вращать его руками вокруг вертикальной оси ( в моем случае ось OZ сенсора), Модель тоже вращается вокруг своей OZ оси. Далее кладу сненсор на боковую грань, и делаю ресет позиции ( ресет осуществляется стандартным алгоритмом домножения текущей ориентации на отступ,  равный обратному кватернион умноженному на стартовую позицию). Так вот, после ресета, вращение сенсора вокруг его оси OZ(теперь она в горизонтальной плоскости) уже вращает модель в другой оси(модели)... Я пологал, что повороты вокруг каждой оси сенсора будут иметь такие же повороты модели... независимо от его стартовой позиции (другими словами офсета).... что-то Я не понимаю ...
TrouyanПостоялецwww10 авг. 201720:01#78
Вот так осуществляю ресет:
void KeyPressedHandler()
{
    if (Input.GetKeyDown(KeyCode.R))
    {
        Quaternion StartPosition;
        Quaternion CurrentQuat;
        var state = this.adapter.GetState();
        CurrentQuat = state.Value;
        StartPosition.x = 0;
        StartPosition.y = 0;
        StartPosition.z = 0;
        StartPosition.w = 1;

        Offset = Quaternion.Inverse(CurrentQuat) * StartPosition;
    }
}

void Update()
{
    Quaternion CurrentQuat;

    var state = this.adapter.GetState();
    CurrentQuat = state.Value* Offset;
    transform.rotation = CurrentQuat;
}
TrouyanПостоялецwww10 авг. 201720:08#79
Похоже должно быть так:
CurrentQuat = Offset*state.Value;

Страницы: 1 2 3 4 5 6

/ Форум / Программирование игр / 2D графика и изометрия

2001—2017 © GameDev.ru — Разработка игр