我正在尝试完成我的相机方向并遇到了一个问题,我需要计算两个矢量之间的角度,以便旋转相机以查看我想要的方向。目前我的相机总是看0,0,0无论我是否指定相机'lookat'。我发现我的相机只会通过增加/减少我存储的浮点数来旋转(在创建旋转矩阵时使用)。
我正在尝试围绕Y轴旋转,而我正在使用XMMatrixRotationAxisY(vector,#);
我有VectorA和VectorB。 VectorA =相机的当前外观位置和 VectorB =相机所需的外观位置
如何基于上面的两个向量计算传递到XMVectorRotationY的角度?
XMFLOAT3 currentDirection = XMFLOAT3(1.0f, 0.0f, 1.0f);
XMFLOAT3 destinationDirection = XMFLOAT3(200.0f, 0.0f, 200.0f);
rotationY = ?
XMMatrixRotationAxisY(vector, rotationY);
?是我们希望通过
旋转的角度答案 0 :(得分:0)
两个向量v1,v2的叉积产生垂直于由另外两个向量定义的平面的另一个向量(v)。这个(v)是你的旋转轴。
旋转角度是矢量v1,v2的点积的反余弦。
你可以计算(v)投射到所需平面的分解,再次使用点积可以很容易。
答案 1 :(得分:0)
首先,将这两个向量投射到XOZ上( v_proj = {dot(v,X),0,dot(v,Z)}其中X,Y,Z是基矢量,点是点积。由于您获得了在XOZ上投影的当前和目标向量,规范化预测。然后找到cos(theta)= dot(cur_proj,dest_proj)。调用acos角度。或者你可以自己构建旋转矩阵。
Rot_y =
cos(theta); 0; sin(theta);
0; 1; 0;
-sin(theta); 0; cos(theta)
其中sin(theta)= | cur_proj X dest_proj | - 跨产品。要获得符号,您需要查看交叉向量的Y分量