繁体   English   中英

如何在不使用高级3d功能的情况下使用DirectX9进行.png图像模糊处理HLSL /每像素运动blut /顶点着色器

[英]How to do .png image blur using DirectX9 without using advance 3d features HLSL / Per Pixel motion blut / Vertex Shader

任何人都可以帮助我如何使用DirectX9(d3d的2d图形功能)而不使用高级3d功能(例如高级着色器语言(HLSL),Direct3D每像素运动模糊和顶点着色器)进行.png图像模糊。

详细说明:

我在表面上有一排6个相邻的.png图像(6个Sprite纹理),然后以圆形方式连续移动/更改纹理位置(1-> 2-> 3-> 4-> 5-> 6 -> 1-> 2-> 3-> 4-> 5-> 6)具有不同的alpha分量,以获得旋转效果(二维旋转)的感觉。

问题:

即使使用变化的精灵纹理alpha值和变化的每秒帧数(fps),我也无法获得连续图像变化之外的真实感觉。 在进行了如此多的网络搜索后,我发现了一个线索,如果我在.png文件中动态应用模糊效果(高斯模糊/框模糊),就有可能获得旋转效果。

但是由于目标平台中的3d支持限制,除2d功能外,我无法使用Direct3d的高级3d功能来获得旋转效果(运动模糊的种类)。

我热烈欢迎论坛成员提供有益的帮助/建议/示例代码/将我引导到解决此问题的正确途径。

样例代码:

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中进行尝试要容易得多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM