Я пытаюсь сохранить свою матрицу вращения как кватернион, а затем, когда я хочу использовать ее для преобразования, преобразуйте ее обратно. Я использую библиотеку glm, которая предоставляет для них mat4_cast и quat_cast. Однако, когда я выполняю следующий код:Ошибка преобразования матрицы в кватернион и обратно
glm::mat4 origTest = glm::lookAt(position, lookAtPt, up);
glm::quat quatTest = glm::quat_cast(origTest);
glm::mat4 mat4Test = glm::mat4_cast(quatTest);
Я получаю разные значения для origTest и mat4Test. Я что-то упустил? позиция, lookAtPt и выше - glm :: vec3.
Как другой? Будет ошибка округления. –
Нет, это не ошибка округления. 4-я строка матрицы полностью отличается для значений, которые я пробовал: это позиция (0, 0, 5); lookAtPt (0, 0, 0) и вверх (0,1, 0) – shaveenk
Мне удалось выяснить это частично. То, как работает преобразование, не учитывало параметр позиции. Поэтому вместо предоставления какого-либо смещения позиции от начала координат я предоставил позицию vec3 (0) и сделал обратный перевод на lookAtPt. Теперь как origTest, так и mat4Test предоставляют одинаковые значения. Но мне действительно нужно, чтобы он учитывал всю матрицу 4x4, чтобы она была полезной – shaveenk