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()
Это позволит вам получить кватернионы без изменения данных файла.
Я не буду беспокоиться о числовых ошибках, они используют те же шаги преобразования, которые используются внутри, когда вы меняете режимы вращения, и вы можете менять их назад и вперед весь день, не видя никакой визуальной разницы, изменение порядка оси вращения Эйлера делает иметь значение, хотя.