首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

问一上这个函数到底是怎么旋转矩阵的?

2013-01-04 
问一下这个函数到底是如何旋转矩阵的??是在三个轴上分别旋转,那先后顺序呢??谢谢inline D3DXMATRIX* SetRo

问一下这个函数到底是如何旋转矩阵的??
是在三个轴上分别旋转,那先后顺序呢??谢谢


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);
}

[解决办法]
这是制作旋转矩阵的公式啊
[解决办法]
默认的顺序无关紧要,因为每个轴的旋转量可以按任何次序合并,唯一的例外是gimbal lock,所以才又去用四元数做旋转。
[解决办法]
就是这个公式:
          cos(a)cos(c) - cos(b)sin(a)sin(c)    -cos(b)cos(c)sin(a) - cos(a)sin(c)   sin(a)sin(b)  0
          cos(c)sin(a) + cos(a)cos(b)sin(c)    cos(a)cos(b)cos(c) - sin(a)sin(c)    -cos(a)sin(b) 0
          sin(b)sin(c)                         cos(c)sin(b)                         cos(b)        0
          0                                     0                                   0             1
大概就是这样的格式。
[解决办法]
  cos(a)cos(c) - cos(b)sin(a)sin(c) -cos(b)cos(c)sin(a) - cos(a)sin(c)  sin(a)sin(b)   0
  cos(c)sin(a) + cos(a)cos(b)sin(c) cos(a)cos(b)cos(c) - sin(a)sin(c)   -cos(a)sin(b)  0
  sin(b)sin(c)                      cos(c)sin(b)                        cos(b)         0
  0                                 0                                   0              1


[解决办法]
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

热点排行