Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Animation 四元数可以表示360度以上的旋转吗?_Animation_Graphics_3d_Quaternions - Fatal编程技术网

Animation 四元数可以表示360度以上的旋转吗?

Animation 四元数可以表示360度以上的旋转吗?,animation,graphics,3d,quaternions,Animation,Graphics,3d,Quaternions,我喜欢基于度数的Euler旋转,因此我可以为大量度数(如1000)的动画设置关键帧,并在对象上获得多个完整的360度旋转,以便设置旋转等 然而,我现在正处于这样一个时刻,当时我正在做一件事,涉及到两个不同轴之间的大量连续动画,我想我看到了万向锁的效果。当我执行其中一个链接动画时,我的对象在完成90度旋转后继续翻转180度。这听起来像万向节锁吗?它只发生在其他先前的和成功的沿不同轴旋转之后 在任何情况下,我都尝试切换到四元数,但四元数似乎不适合这种旋转效果,因为它们只是给你一个方向,并使用以下方法

我喜欢基于度数的Euler旋转,因此我可以为大量度数(如1000)的动画设置关键帧,并在对象上获得多个完整的360度旋转,以便设置旋转等

然而,我现在正处于这样一个时刻,当时我正在做一件事,涉及到两个不同轴之间的大量连续动画,我想我看到了万向锁的效果。当我执行其中一个链接动画时,我的对象在完成90度旋转后继续翻转180度。这听起来像万向节锁吗?它只发生在其他先前的和成功的沿不同轴旋转之后

在任何情况下,我都尝试切换到四元数,但四元数似乎不适合这种旋转效果,因为它们只是给你一个方向,并使用以下方法将360的倍数视为0:

template <typename T>
 inline QuaternionT<T>  QuaternionT<T>::CreateFromAxisAngle(const Vector3<T>& axis, float radians)
 {
QuaternionT<T> q;
q.w = std::cos(radians / 2);
q.x = q.y = q.z = std::sin(radians / 2);
q.x *= axis.x;
q.y *= axis.y;
q.z *= axis.z;
return q;
}
模板
内联四元数四元数::CreateFromAxisAngle(常量矢量3和轴,浮点弧度)
{
四元数q;
q、 w=std::cos(弧度/2);
q、 x=q.y=q.z=std::sin(弧度/2);
q、 x*=轴x;
q、 y*=轴y;
q、 z*=轴z;
返回q;
}

四元数技术是否可以实现360度以上的旋转?

您的情况听起来不像万向节锁。万向节锁定是指你不能再向任何其他方向旋转,只能向一个方向旋转,因为你的轴彼此对齐*。听起来更像是一个交叉产品。无论如何,你不应该有任何问题,因为你只有两个轴为你,所以只要你选择合适的旋转顺序应该没有任何问题万向锁

quats工作的原因是它们统一表示旋转空间,并且该空间没有多余的值。您可以每180到90度设置一次关键点,quats将正常工作。但是,它们不会像您现在所做的那样进行插值。事实上,你不能一次在多个轴上旋转,始终只有一个旋转在进行,同时旋转可能欧拉角会一直保持第二个旋转方向。一种方法是均匀分割动画并使用四元插值,但使用欧拉器计算关键帧位置。另一种方法是在quat的长度中对旋转周期进行编码

在任何情况下,结果都不一样,因为你不会得到欧拉摆动

* you can visualize this by drawing rings at each axis orientation instead
  of your object and see how they move to overlap (like a gimbal hence the name).

“Euler摆动”是什么意思?如果同时为两个Euler旋转设置关键帧,则对象开始摆动。它不像一些人说的那样,因为它绕着两个轴旋转,它只是一个跷跷板,因为你实际上一直在改变旋转方向。(结果是一种螺旋路径)我知道这种飞行面对的是你认为是真实的,但你不能在3d空间中同时对一件事情进行两次旋转。