2012-11-03 99 views
1

我目前正在使用DirectX在飛機上進行簡單的汽車模擬。我在飛機上定位汽車方面遇到問題。
我在做什麼這是... ...在飛機上的汽車定位

D3DXMATRIX planeMat //matrix of the plane on which car is currently situated. 
... 

//calculating car rotation matrix (on XZ plane) 
D3DXMATRIX carRot; 
D3DXMatrixRotationY(&carRot , yaw); 

//car up will same as plane 
D3DXVECTOR3 carUp = D3DXVECTOR3(planeMat._12 , planeMat._22 , planeMat._32); 
//car lookat vector 
D3DXVECTOR3 carLookat = D3DXVECTOR3(carRot._13 , carRot._23 , carRot._33); 
// calculating right vector 
D3DXVec3Cross(&carRight , &carLookAt , &carUp); 
D3DXVec3Normalize(&carRight , &carRight); 
//calculating new lookat 
D3DXVec3Cross(&carLookAt , &carRight , &carUp); 
D3DXVec3Normalize(&carLookAt , &carLookAt); 

//car matrix 
D3DXMATRIX carMat; D3DXMatrixIdentity(&carMat); 
carMat._11 = carRight.x ;carMat._21 = carRight.y ;carMat._31 = carRight.z ; 
carMat._12 = carUp.x ;carMat._22 = carUp.y ;carMat._32 = carUp.z ; 
carMat._13 = carLookAt.x ;carMat._23 = carLookAt.y ;carMat._33 = carLookAt.z ; 
carMat._41 = carPos.x ;carMat._42 = carPos.y ;carMat._43 = carPos.z ; 

我不能讓汽車的旋轉正確。
請幫助我。

回答

0

您在設置矩陣中使用組件的方式&看起來不正確。例如,在carMat中,3個基向量具有組件的第二個數字常量,但在最後一個(carPos)中,組件的第一個數字是常量。對於矩陣的所有4行/列,它可以是單向的或其他的。

我相信你設置汽車的位置(最後一行/列)的方式是正確的方式,你正在做的方式,對,& lookat是不正確的。所以,舉例來說,這也許應該是這樣的:

D3DXMATRIX carMat; D3DXMatrixIdentity(&carMat); 
carMat._11 = carRight.x ;carMat._12 = carRight.y ;carMat._13 = carRight.z ;//11, 12, 13 instead of 11, 21, 31 
carMat._21 = carUp.x ;carMat._22 = carUp.y ;carMat._23 = carUp.z ; 
carMat._31 = carLookAt.x ;carMat._32 = carLookAt.y ;carMat._33 = carLookAt.z ; 
carMat._41 = carPos.x ;carMat._42 = carPos.y ;carMat._43 = carPos.z ; 

而且,你的方式填充的載體從同一個問題的planeMat & carRot遭受carUpcarLookAt FOM的組件。

+0

嗨,感謝你的ans.it working.i打勾它是正確的,但你可以告訴我任何我看到的地方,人們提取像我這樣做的方式,看,向上和向右的向量http:///www.toymaker.info/Games/html/camera.html – YAHOOOOO