Вращающийся объект Sprite Directx9

Я делаю небольшую игру на C ++ с Directx 9. Я читаю некоторый учебник, и я могу нарисовать свой объект спрайта, переместить его и т. Д. Но я хочу повернуть его. Я пытаюсь:

void D3DGraphics::DrawSprite(LPDIRECT3DTEXTURE9 &texture,ID3DXSprite* pSprite, D3DXVECTOR3* pos, D3DXVECTOR3* dim ){

pDevice->Clear( 0,NULL,D3DCLEAR_STENCIL,D3DCOLOR_XRGB(0,0,0),0.0f,0 );

D3DXMATRIX matrix;
D3DXMatrixRotationX(&matrix, 0.05f);

pSprite->Begin(D3DXSPRITE_ALPHABLEND);hresult= pSprite->SetTransform(&matrix);

hresult= pSprite->Draw(texture, NULL, dim, pos, 0xFFFFFFFF);pSprite->End();

}

Когда я удаляю эту часть, она работает отлично. Я проверил результаты, они вернули S_OK. Есть идеи?

0

Решение

Я думаю, что главная проблема в том, что вы пытаетесь использовать 3D-преобразования для 2D-сценария. Попробуйте поработать с D3DXMatrixTransformation2D (доктор) для матрицы. Но есть и дополнительные проблемы. Я предполагаю, что имя dim обозначает размерность, но этот параметр Draw()(доктор) устанавливает центр спрайта, а не размер. Наконец, очистка вашего трафаретного буфера на весь экран без какого-либо его использования является излишне дорогой, но я не знаю ваш другой код.
Надеюсь, это поможет 🙂

0

Другие решения

Я думаю, что не имеет смысла вращать спрайт, так как спрайт обычно поставляется с 2d текстурой и используется для биллбординга, если вы поворачиваете его вокруг оси X, это похоже на то, как картинка переворачивается вокруг оси X, Вы не можете получить желаемый эффект, я попытался повернуть его вокруг оси Z, это работает хорошо, так как текстура обычно была на плоскости XOY.

если вы хотите сделать вращающийся шар, почему бы не использовать 3D-сетку? Спрайт не является хорошим выбором для этого запроса.

0

По вопросам рекламы [email protected]