Как правильно повернуть кватернион GLM?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как правильно повернуть кватернион GLM?

Сообщение Anonymous »

Я хочу повернуть свою машину на 90 градусов влево в игре.
Когда я использую этот код:

Код: Выделить всё

glm::quat rot(info.Rotation.w,info.Rotation.x,info.Rotation.y,info.Rotation.z);
glm::quat done(glm::rotate(rot,glm::eulerAngles(rot)+glm::vec3(90.0f,0.0,0.0)));
info.Rotation.x = done.x;
info.Rotation.y = done.y;
info.Rotation.z = done.z;
info.Rotation.w = done.w;
Машина начинает вращаться странно.
Однако следующие коды вообще не меняют вращение машины (именно то, что я ожидал, просто для удобства). убедитесь, что GLM совместим с кватами из игры):

Код: Выделить всё

glm::quat rot(info.Rotation.w,info.Rotation.x,info.Rotation.y,info.Rotation.z);
glm::quat done(rot);
info.Rotation.x = done.x;
info.Rotation.y = done.y;
info.Rotation.z = done.z;
info.Rotation.w = done.w;
и всякий раз, когда я пытаюсь это проверить, изменилось ли при этом вращение:

Код: Выделить всё

glm::quat rot(info.Rotation.w,info.Rotation.x,info.Rotation.y,info.Rotation.z);
glm::quat done(glm::rotate(rot,vec3(0.0,0.0,0.0)));
info.Rotation.x = done.x;
info.Rotation.y = done.y;
info.Rotation.z = done.z;
info.Rotation.w = done.w;
В игре вращение автомобилей установлено на 0,0,0,0. Я ожидал, что этот код не затронет повороты, потому что я ожидал, что следующий код повернет машину на 90 градусов влево:

Код: Выделить всё

glm::quat rot(info.Rotation.w,info.Rotation.x,info.Rotation.y,info.Rotation.z);
glm::quat done(glm::rotate(rot,vec3(90.0,0.0,0.0)));
info.Rotation.x = done.x;
info.Rotation.y = done.y;
info.Rotation.z = done.z;
info.Rotation.w = done.w;
но это работает не так, как я хочу. Он просто устанавливает поворот, а не добавляет его к гниению.
Что я делаю не так?

Подробнее здесь: https://stackoverflow.com/questions/150 ... -correctly
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»