我正在尝试使用Quaternion旋转矢量,使用Quaternion.Euler(x,y,z)
构造它按预期工作,但问题是,旋转是相对于世界坐标系完成的,而我想要尊重地旋转向量本身。
所以我想把坐标系作为
z = vector's direction,
x = vector's perpendicular (any)
y = world y.
所以我的代码是这样的:
myVector = euler * myVector;
然而我需要
myVector = localEuler * myVector;
所以我需要将localEuler
计算为euler
和myVector
的函数。
我该怎么做?
感谢您的帮助!
localEuler = Quaternion.Euler(euler.x * myVector.x ,euler.y * myVector.y ,euler.z * myVector.z );
它不起作用。我猜这是点积。
我认为这有Transform
的内置代码:Transform.RotateAround()
,但我需要使用Vector3
,而不是Transform
。
答案 0 :(得分: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;