Следующий код получает текущую матрицу преобразования.
m_sprite->GetTransform(&mat);
Следующий код вычисляет новую матрицу преобразования, которая перезапишет матричный мат, поскольку вы используете ту же переменную.
D3DXMatrixTransformation2D(&mat, NULL, NULL, NULL, &D3DXVECTOR2(m_width / 2, m_height / 2), rotation, &D3DXVECTOR2(m_posX, m_posY));
Следующий код восстанавливает старую матрицу преобразования, которая не будет работать, старое преобразование было утеряно, вы применяете только новое преобразование.
m_sprite->SetTransform(&mat);
Вам лучше использовать другую матричную переменную при вычислении новой матрицы преобразования, а затем умножить ее на старую матрицу преобразования, чтобы получить окончательную матрицу.
D3DXMATRIX newmat;
D3DXMatrixTransformation2D(&newmat, NULL, NULL, NULL, &D3DXVECTOR2(m_width / 2, m_height / 2), rotation, &D3DXVECTOR2(m_posX, m_posY));
mat *= newmat;
m_sprite->SetTransform(&mat);
person
zdd
schedule
14.08.2013