我如何找到两个3D向量之间的角度以进行相机方向



我目前正在尝试完成相机方向,并遇到了一个问题,我需要计算两个向量之间的角度,以便旋转相机以朝我所需的方向旋转。目前,无论我是否指定" Lookat"相机,我的相机总是看0,0,0。我发现我的相机只会通过增加/减小我存储的浮子(创建旋转矩阵时使用)来旋转。

我试图仅在y轴周围旋转,而对于旋转,我正在使用xmmatrixrotationaxisy(vector,#);

我有vectora和vectorb。 vectora =摄像机的当前lookat位置和 vectorb =相机的所需lookat位置

如何根据上面的两个向量计算到XMVectorrotation的角度?

XMFLOAT3 currentDirection = XMFLOAT3(1.0f, 0.0f, 1.0f);
XMFLOAT3 destinationDirection = XMFLOAT3(200.0f, 0.0f, 200.0f);
rotationY = ?
XMMatrixRotationAxisY(vector, rotationY);

是我们希望通过

旋转的角度

两个向量v1,v2的交叉产物产生另一个垂直于其他两个向量定义的平面的向量(v)。此(v)是您旋转的轴。

旋转角度是向量V1,V2的点产物的arccosine。

您可以计算(V)投射到所需的平面中的分解,这可以再次使用点产品。

首先,在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 | - 跨产品。要获取标志,您需要查看Cross Vector的Y组成部分

最新更新