我正在开发一个小型 Unity3D 项目,我需要从另一个工具导入一些数据。该工具通过两个向量为我提供了面向对象,我需要将其移植到 Unity。
例如,我有这两个向量;
x = Vector( 0.707, 0.707, 0)
y = Vector(-0.707, 0.707, 0)
只有这些信息,我需要了解我的对象需要在 Z 轴上旋转 45 度。这两个向量代表我的对象的上向量和右向量,不是起点也不是目的地。
编辑
好的,现在我可以进行单轴旋转了!是的!提供了这个功能;
function RotationMaster (vx : Vector3, vy : Vector3) {
var vz = Vector3.Cross(vx, vy);
var x = Mathf.Atan2(-vz.y, vz.z) * Mathf.Rad2Deg;
var y = Mathf.Atan2( vx.z, vx.x) * Mathf.Rad2Deg;
var z = Mathf.Atan2(-vx.y, vx.x) * Mathf.Rad2Deg;
Debug.Log("x : " + x + "; y : " + y + "; z : " + z);
transform.rotation = Quaternion.Euler(x,y,z);
}
我现在可以像这样传递简单的旋转:
RotationMaster(Vector3(1,0,0), Vector3(0,0.707,0.707));
RotationMaster(Vector3(1,0,0), Vector3(0,-1,0));
只要我不玩多轴,它就可以工作。但是,一旦我尝试更复杂的旋转,它就会失败……举个例子;
RotationMaster(Vector3(-0.5,-0.5,0.707), Vector3(-0.707,0.707,0));
这是错误的...... :-(
有什么线索吗?