2012-06-25 289 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,查看更新 –