【发布时间】:2013-12-24 08:07:53
【问题描述】:
在 Actionscript 3 中,我有一个 3D 对象,它围绕它的 x、y 和 z 轴随机旋转。我希望能够将其停在原地,然后将其旋转到指定的旋转之间,并采用最短的路线。似乎四元数是这项工作的正确工具,但我不确定如何正确补间。我正在尝试补间轴角旋转,然后将其转换为四元数。到目前为止,这是我的测试代码。
var startV3DV:Vector.<Vector3D> = new <Vector3D>[positionV3D, new Vector3D(0,1,0,0), scaleV3D];
var endV3DV:Vector.<Vector3D> = new <Vector3D>[positionV3D, new Vector3D(0,1,0,Math.PI), scaleV3D];
var recomposeV3DV:Vector.<Vector3D> = new <Vector3D>[positionV3D, new Vector3D(0,0,0,0), scaleV3D];
TweenMax.to(startV3DV[1], 2, {x:endV3DV[1].x, y:endV3D[1].y, z:endV3D[1].z, w:endV3D[1].w, onUpdate:quat});
var quatV3D:Vector3D = new Vector3D();
function quat():void {
quatV3D.x = currentV3D[1].x * Math.sin(currentV3D[1].w * .5);
quatV3D.y = currentV3D[1].y * Math.sin(currentV3D[1].w * .5);
quatV3D.z = currentV3D[1].z * Math.sin(currentV3D[1].w * .5);
quatV3D.w = Math.cos(currentV3D[1].w * .5);
recomposeV3DV[1] = quatV3D;
myMatrix3D.recompose(recomposeV3DV,"quaternion");
}
它实际上将对象围绕其 y 轴的旋转补间了一段时间,但是当它达到 PI/2 时,它会出错,并且我在recompose line,我认为这意味着 quatV3D 属性之一不适合四元数公式。有关如何正确执行此操作的任何想法?
【问题讨论】:
标签: actionscript-3 3d rotation quaternions