问一下这个函数到底是如何旋转矩阵的??
是在三个轴上分别旋转,那先后顺序呢??谢谢
inline D3DXMATRIX* SetRotation(D3DXMATRIX* pOut,float fX, float fY, float fZ)
{
#ifdef DEBUG
if(!pOut)
{
assert(0);
return NULL;
}
#endif
D3DXMatrixIdentity(pOut);
double cx = cos(fX);
double sx = sin(fX);
double cy = cos(fY);
double sy = sin(fY);
double cz = cos(fZ);
double sz = sin(fZ);
pOut->_11 = (float)(cy * cz);
pOut->_12 = (float)(cy * sz);
pOut->_13 = (float)(-sy);
pOut->_21 = (float)(sx * sy * cz - cx * sz);
pOut->_22 = (float)(sx * sy * sz + cx * cz);
pOut->_23 = (float)(sx * cy);
pOut->_31 = (float)(cx * sy * cz + sx * sz);
pOut->_32 = (float)(cx * sy * sz - sx * cz);
pOut->_33 = (float)(cx * cy);
}
[解决办法]
D3DXQUATERNION q4Rotation;
D3DXQuaternionRotationAxis(&q4Rotation,&v3Axle,fRadian);//取得按轴旋转得到的四元数
//取出平移量
D3DXVECTOR3 v3Pos =D3DXVECTOR3(_mxWorld._41,_mxWorld._42,_mxWorld._43);
D3DXMatrixTransformation(&_mxWorld,NULL,NULL,NULL,&v3Org,&q4Rotation,&v3Pos);
喵,四元组原理很让人头痛,但有函数可以从转角取四元组。
dana9919@163.com