我正在开发一个旋转脚本,要求如下:
- 以时间为单位应用旋转
- 能够回滚旋转
- 能够旋转所有 3 个轴
- 能够堆叠(多个脚本可以影响同一个对象)
- 支持我可能从另一个源影响旋转
我已经做了以下工作:
- 我的脚本接受一个 Vector3 参数作为欧拉角度和一个曲线
- 每帧,我计算所有欧拉旋转增量的总和
- 然后,我这样应用结果:
Quaternion rotation = Quaternion.Euler(offset);
transform.rotation *= rotation;
这似乎是有效的,但 只有 我确保创建一个支持单个旋转轴的层次结构,如下:
- 容器
- x
- y
- z
- 立方体
如果我在一个单独的转换上应用多个轴旋转,事情就糟糕了。并且这只会在本地轴上起作用。只要我尝试使用世界轴做同样的事情,就无法回滚旋转了。
我的数学背景不是很深,我听了几次四元数课程,但我仍然不确定我的目标是否实际上是可以实现的。
我的问题是:
1:是否正常需要将旋转轴分开到 3 个不同的转换中,以防止 gimbalock 并能够回滚我的累积旋转?
2:从我理解的角度来看,按照我计划的那样实现可逆旋转在世界空间是不可能的,需要跟踪所有增量以确保在恰当的逆序应用它们。
评论 (0)