Может ли кто-нибудь помочь мне, как сделать .png размытие изображения с помощью DirectX9 (функция 2D-графики d3d) без использования передовых 3D-функций, таких как язык высокоуровневых шейдеров (HLSL), Direct3D на пиксельное размытие движения и Vertex Shader.
У меня есть ряд из 6 смежных изображений .png (6 текстур Sprite) на поверхности, а затем я непрерывно перемещаю / изменяю расположение текстур по кругу (1-> 2-> 3-> 4-> 5-> 6 -> 1-> 2-> 3-> 4-> 5-> 6) с изменяющимся альфа-компонентом для получения эффекта вращения (2-мерное вращение).
Даже с разными значениями альфа-текстуры спрайта и разным кадром в секунду (fps) у меня не было ощущения вращения без постоянной смены изображения. После стольких поисков в Интернете я обнаружил, что получить эффект вращения можно, если применить эффект размытия (размытие по Гауссу / размытие в виде рамки) в файле .png на лету.
Но из-за ограничения поддержки 3d в моей целевой платформе я не могу использовать продвинутые функции 3d в direct3d, кроме функций 2D, для получения эффекта вращения (вид размытия в движении).
Я тепло приветствую участников форума за их любезную помощь / предложение / пример кода / указание на правильный путь для решения этой проблемы.
void D3DGraphics::DrawSprite(LPDIRECT3DTEXTURE9 &texture,ID3DXSprite* pSprite, DXVECTOR2 Trans_11, int ImgIndex) {
D3DXMATRIX Matrix;
pDevice->Clear( 0,NULL,D3DCLEAR_STENCIL,D3DCOLOR_XRGB(0,0,0),0.0f,0 );
pSprite->Begin(D3DXSPRITE_ALPHABLEND);
D3DXMatrixTransformation2D(&Matrix, NULL, NULL, NULL, NULL, 0, &Trans_11);
pSprite->SetTransform(&Matrix1);
--> Need blur effect before write operation / while loading .png file as texture <---
pSprite->Draw(texture[ImgIndex], NULL, NULL, NULL, 0xFFFFFFFF);
pSprite->End();
}
Если для обеспечения плавной анимации недостаточно прокручивать 6 изображений, почему бы не выполнить цикл, скажем, 12 или 24? Если у вас есть только 6 «оригинальных рисунков», все равно было бы проще сгенерировать промежуточные изображения заранее, используя инструменты типа photoshop / imagemagick и просто загрузив их в свое приложение, чем пытаясь сделать это в DirextX.