如何找到摄像机方向的两个3D矢量之间的角度?

时间:2017-02-16 19:50:38

标签: math camera rotation directx-11

我正在尝试完成我的相机方向并遇到了一个问题,我需要计算两个矢量之间的角度,以便旋转相机以查看我想要的方向。目前我的相机总是看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);

是我们希望通过

旋转的角度

2 个答案:

答案 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分量