我正在为我的场景格式编写一个blender导出器。
导出时,我需要将旋转作为四元数。
我找到的最简单的方法是使用rotation_quaternion。但是,当rotation_mode
设置为'QUATERNION'
时,此成员仅保证存储轮换。
我的临时解决方案当前如下:
prevRotationMode = object.rotation_mode
object.rotation_mode = 'QUATERNION'
rotationAsQuaternion = object.rotation_quaternion
object.rotation_mode = prevRotationMode
这个解决方案有效,但我担心这会在我的导出器经常被调用时引入数值错误,因为旋转角度将在四元数表示和原始表示之间转换。
我的第二个想法是复制对象,然后更改对象副本中的旋转模式,然后删除它。但这仍然不是一个干净的解决方案,因为导出脚本会修改场景。
是否有一种优雅的方法可以在不修改场景的情况下将旋转作为四元数?
答案 0 :(得分:1)
mathutils模块为您提供了一些有用的功能,其中一些功能已经可以直接从各种属性中获得。
rot_output = object.rotation_euler.to_quaternion()
这样就可以在不改变文件数据的情况下获得四元数。
我不会担心数字错误,这些错误会使用与更改旋转模式时内部使用的相同转换步骤,并且您可以整天来回更改它们而不会看到任何视觉差异,从而更改轴顺序虽然欧拉旋转确实有所不同。