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