Как сделать .png размытие изображения с использованием DirectX9 без использования передовых 3D-функций HLSL / Per Pixel motion blut / Vertex Shader

Может ли кто-нибудь помочь мне, как сделать .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();

}

0

Решение

Если для обеспечения плавной анимации недостаточно прокручивать 6 изображений, почему бы не выполнить цикл, скажем, 12 или 24? Если у вас есть только 6 «оригинальных рисунков», все равно было бы проще сгенерировать промежуточные изображения заранее, используя инструменты типа photoshop / imagemagick и просто загрузив их в свое приложение, чем пытаясь сделать это в DirextX.

1

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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector