我目前正在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 :(得分: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 ;
此外,您填充carUp
和carLookAt
的组件的方式planeMat
和carRot
。 {{1}}遇到同样的问题。