2

我有精灵旋转的问题。旋转后屏幕上缺少精灵,为什么?我只想将精灵旋转 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();
4

1 回答 1

1

以下代码获取当前变换矩阵。

m_sprite->GetTransform(&mat);

以下代码计算新的变换矩阵,由于您使用相同的变量,它将覆盖矩阵 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);
于 2013-08-14T06:48:39.377 回答