gpt4 book ai didi

c++ - 如何在不使用高级 3d 功能的情况下使用 DirectX9 进行 .png 图像模糊 HLSL/Per Pixel motion blut/Vertex Shader

转载 作者:行者123 更新时间:2023-11-28 07:47:50 25 4
gpt4 key购买 nike

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

详细解释:

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

问题:

即使使用不同的 Sprite 纹理 alpha 值和不同的每秒帧数 (fps),我也没有从连续的图像变化中获得旋转的真实感觉。经过如此多的网络搜索,我发现如果我在 .png 文件中即时应用模糊效果(高斯模糊/框模糊),可以获得旋转效果的线索。

但由于我的目标平台对 3d 支持的限制,我无法使用 direct3d 的高级 3d 功能,除了 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 中加载它们仍然更容易。

关于c++ - 如何在不使用高级 3d 功能的情况下使用 DirectX9 进行 .png 图像模糊 HLSL/Per Pixel motion blut/Vertex Shader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14528508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com