Возможно так тогда (но синтаксис точный не воспроизведу, не пишу на С++ и на DX
):
bool cWorldMatrix::Move(float x,float y,float z)
{
D3DXVECTOR3 up = new D3DXVECTOR3 (0,1,0);
D3DXVECTOR3 right = new D3DXVECTOR3 (1,0,0);
D3DXVECTOR3 forward = new D3DXVECTOR3 (0,0,1);
D3DXMATRIX matrix;
D3DXMatrixRotationYawPitchRoll(&matrix, ay, ax, az);
D3DXVECTOR4 thisUp;
D3DXVECTOR4 thisRight;
D3DXVECTOR4 thisForward;
D3DXVec3Transform(&thisUp, &up, &matrix);
D3DXVec3Transform(&thisRight, &right, &matrix);
D3DXVec3Transform(&thisForward, &forward, &matrix);
D3DXVec4Normalize(&thisUp, &thisUp);
D3DXVec4Normalize(&thisRight, &thisRight);
D3DXVec4Normalize(&thisForward, &thisForward);
D3DXVECTOR4 resultMove = thisUp * y + thisRight * x + thisForward * z;
px+= resultMove.x;
py+= resultMove.y;
pz+= resultMove.z;
return TRUE;
}
UPD по примеру от HolyDel:
bool cWorldMatrix::Move(float x,float y,float z)
{
D3DXMATRIX matrix;
D3DXMatrixRotationYawPitchRoll(&matrix, ay, ax, az);
D3DXVECTOR3 localMove = new D3DXVECTOR3 (x,y,z);
D3DXVECTOR4 resultMove;
D3DXVec3Transform(&resultMove, &localMove , &matrix);
px+= resultMove.x;
py+= resultMove.y;
pz+= resultMove.z;
return TRUE;
}