С++ DirectX9 неправильное вращение спрайта

У меня проблема с вращением спрайта. Спрайт отсутствует на экране после поворота, почему? Я просто хочу повернуть спрайт на 270 градусов (4,712 радиана).

D3DXMATRIX mat;

m_sprite->Begin(D3DXSPRITE_ALPHABLEND);
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);
m_sprite->Draw(m_texture, NULL, NULL, &m_pos, -1);
m_sprite->End();

person Dmitry K.    schedule 14.08.2013    source источник
comment
Требуется дополнительная информация, каково значение вращения, m_posX и m_posY?   -  person zdd    schedule 14.08.2013
comment
@Sheppard_ ты решил это?   -  person Sunny R Gupta    schedule 27.08.2013


Ответы (1)


Следующий код получает текущую матрицу преобразования.

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