1

我正在为我的场景格式编写一个搅拌机导出器。

导出时,我需要将旋转作为四元数。

我发现最简单的方法是使用rotation_quaternion。但是这个成员只保证在rotation_mode设置为时存储旋转'QUATERNION'

我的临时解决方案当前看起来像:

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

此解决方案有效,但我担心当我的导出器经常被调用时,这可能会引入数值错误,因为旋转角度将在四元数表示和原始表示之间转换。

我的第二个想法是复制对象,并在对象副本中更改旋转模式,然后将其删除。但这仍然不是一个干净的解决方案,因为场景会被导出器脚本修改。

有没有一种优雅的方法可以在不修改场景的情况下将旋转作为四元数?

4

1 回答 1

3

mathutils模块为您提供了一些有用的功能,其中一些已经可以直接从各种属性中获得。

rot_output = object.rotation_euler.to_quaternion()

这将允许您在不更改文件数据的情况下获取四元数。

我不会担心数值错误,这些使用与您更改旋转模式时内部使用的相同转换步骤,您可以整天来回更改它们而不会看到任何视觉差异,更改欧拉旋转的轴顺序确实虽然有所作为。

于 2014-10-03T08:08:27.990 回答