高中没白上啊,居然还用到了矩阵,不过都快忘干净了,又复习了一下。
旋转和移动是分步进行的,然后再把每一步的结果相乘即为所得结果。
写了个函数,方便自己使用。
HRESULT CXDirect3D::SetObjectPositionXYZ(CONST FLOAT x, CONST FLOAT y, CONST FLOAT z, CONST FLOAT AngleX, CONST FLOAT AngleY, CONST FLOAT AngleZ) { D3DXMATRIX World, WorldX, WorldY, WorldZ; D3DXMatrixRotationX(&WorldX, AngleX);//旋转 D3DXMatrixRotationY(&WorldY, AngleY);//旋转 D3DXMatrixRotationZ(&WorldZ, AngleZ);//旋转 D3DXMatrixTranslation(&World, x, y, z);//移动 World *= WorldX; World *= WorldY; World *= WorldZ; return m_pDevice->SetTransform(D3DTS_WORLD, &World); }
哎,只会用函数,至于什么运算法则,早就记不起来了。
参数中Angle即为要旋转的量,xyz为物体的中心坐标。