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 ;

我无法让汽车的旋转正确。
请帮我。

4

1 回答 1

0

您在矩阵中设置和使用组件的方式看起来不正确。例如,在carMat3 个基向量中,分量的第 2 位是常数,但在最后一个(carPos)中,分量的第 1 位是常数。对于矩阵的所有 4 行/列,它要么是一种方式,要么是另一种方式。

我相信您设置汽车位置(最后一行/列)的方式是正确的,而您进行向上、正确和查看的方式是不正确的。因此,例如,它可能应该是这样的:

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 ;

此外,您填充向量carUp和形成&carLookAt的组件的方式也遇到了同样的问题。planeMatcarRot

于 2012-11-03T14:20:04.777 回答