小编use*_*268的帖子

Direct3D使用“乘法”混合模式和Alpha渲染2D图像

我正在尝试将Photoshop滤镜复制为Direct3D。我一直在阅读和搜索不同的渲染状态,并且效果几乎可以正常工作。问题在于它忽略了纹理的Alpha值。

这是说明情况的图像:

http://www.kloonigames.com/petri/stackoverflow_doesnt_allow_.jpg

我找到了一种解决方案,那就是保存没有透明度和白色背景的图像。但是我对这种解决方案不满意。问题是我真的需要使用alpha值。我想逐渐淡出图像。如果混合模式忽略了alpha值,则无法执行此操作。

所以问题是如何用alpha渲染图像?

这是混合模式代码:

dev->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
dev->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ZERO);
dev->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_SRCCOLOR);
Run Code Online (Sandbox Code Playgroud)

编辑添加了SetTextureStageState

dev->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
dev->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
dev->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE);
dev->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE);
Run Code Online (Sandbox Code Playgroud)

c++ photoshop graphics direct3d alphablending

5
推荐指数
2
解决办法
6178
查看次数

标签 统计

alphablending ×1

c++ ×1

direct3d ×1

graphics ×1

photoshop ×1