1

我正在尝试使用四元数旋转矢量,Quaternion.Euler(x,y,z)并按预期工作,但问题是,旋转是相对于世界坐标系完成的,而我想相对于矢量本身旋转。

所以我想把坐标系作为

z = vector's direction,     
x = vector's perpendicular (any)  
y = world y.

所以我的代码是这样的:

myVector = euler * myVector;

但是我需要

myVector = localEuler * myVector;

所以我需要计算和localEuler的函数。eulermyVector

我怎样才能做到这一点 ?

谢谢你的帮助 !

我试过 :

localEuler = Quaternion.Euler(euler.x * myVector.x ,euler.y * myVector.y ,euler.z * myVector.z );

它没有用。我想这是点积。

附言

Transform我认为这有一个s:的内置代码Transform.RotateAround(),但我需要用 a 来做Vector3,而不是 a Transform

4

1 回答 1

2

我解决了我的问题。

我的解决方案是这样的:

  • 使用Quaternion.AxisAngle(angle : float , rotationAxis : Vector3)

例如,要围绕“局部”x 旋转,rotationAxis应该是 myVector 的垂线,计算如下:

var rotationAxis : Vector3 = Quaternion.Euler(0,90,0) * myVector;
rotationAxis.y = 0;

然后新的四元数计算如下:

var localEuler:Quaternion = Quaternion.AngleAxis(euler.x , rotationAxis);

然后向量正确旋转:

myVector = localEuler * myVector;
于 2013-12-20T10:48:31.990 回答