2012-06-25 156 views
4

我需要从方向矢量(V正向)旋转矩阵,我也有vRight和VUP向量。所有这些矢量都是单位矢量。3D - 旋转矩阵的方向向量(向前,向上,向右)

我只需要得到旋转矩阵。

要在仅与地面平行的一个平面(xy)中获得旋转矩阵,我这样做: XMMATRIX xmResult;

Vec3f vFwd = pPlayer->VForward; 
vFwd.z = 0; 
vFwd.Normalize(); 

xmResult = XMMatrixSet(vFwd.y,  -vFwd.x, 0,  0, 
    vFwd.x,  vFwd.y, 0,  0, 
    0,   0,   1,  0, 
    0,   0,   0,  1); 

上面的代码只得到旋转矩阵绕Z轴旋转:

我想获得的代码,以绕轴所有。 这是我不得不使用的坐标系。我知道这是奇怪的:

Coordinate System I'm using

这是我以后怎么使用我的矩阵代码:

XMStoreFloat3((XMFLOAT3*)&vStart, XMVector3Transform(XMLoadFloat3((XMFLOAT3*)&vStart), xmTransformation)); 
XMStoreFloat3((XMFLOAT3*)&vEnd, XMVector3Transform(XMLoadFloat3((XMFLOAT3*)&vEnd), xmTransformation)); 

回答

4

取决于你如何使用你的矩阵,右,上,正向应该对应到矩阵的行或列。

xmResult = XMMatrixSet(vRight.x, vRight.y, vRight.z, 0, vFwd.x, vFwd.y, vFwd.z, 0, vUp.x, vUp.y, vUp.z, 0, 0, 0, 0, 1); 
+0

我不知道。这就是我所得到的。我不擅长数学。我是程序员,我需要计算几个职位。 – Hooch

+0

这是我将使用该矩阵来画线:\t XMStoreFloat3((XMFLOAT3 *)&的vStart,XMVector3Transform(XMLoadFloat3((XMFLOAT3 *)&的vStart),xmTransformation)); \t XMStoreFloat3((XMFLOAT3 *)&售货,XMVector3Transform(XMLoadFloat3((XMFLOAT3 *)&VEND),xmTransformation)); – Hooch

+0

@Hooch,查看更新 –