2014-10-02 2 views
0

Я пишу экспортер блендера для своего формата сцены.Blender bpy: Извлечь вращение объекта как кватернион без изменения сцены

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

Самый простой способ, который я нашел, - использовать rotation_quaternion. Но этот член гарантирует только сохранение вращения, когда 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() 

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

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