Blender bpy: получение поворота объекта как кватерниона без изменения сцены

Я пишу экспортер блендера для моего формата сцены.

При экспорте мне нужен поворот как кватернион.

Самый простой способ, который я нашел, - это использовать вращение-кватернион. Но этот член гарантирует сохранение вращения только тогда, когда rotation_mode установлен в 'QUATERNION',

Мое текущее временное решение выглядит так:

prevRotationMode = object.rotation_mode
object.rotation_mode = 'QUATERNION'
rotationAsQuaternion = object.rotation_quaternion
object.rotation_mode = prevRotationMode

Это решение работает, но я боюсь, что это может привести к числовым ошибкам, когда мой экспортер будет часто вызываться, так как углы поворота будут преобразованы между кватернионными представлениями и исходным представлением.

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

Есть ли элегантный способ получить вращение в виде кватернионов без изменения сцены?

1 ответ

Решение

Модуль mathutils предоставляет вам несколько полезных функций, некоторые из которых уже доступны напрямую из различных свойств.

rot_output = object.rotation_euler.to_quaternion()

Это позволит вам получить кватернионы без изменения данных файла.

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

Другие вопросы по тегам