我正在尝试使用 Direct3D 复制 Photoshop 过滤器。我一直在阅读和谷歌搜索不同的渲染状态,我的效果几乎可以工作。问题是它忽略了纹理的 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);
编辑添加了 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);