Directx 如何在DX 9中仅混合纹理的某些部分?

Directx 如何在DX 9中仅混合纹理的某些部分?,directx,textures,alphablending,Directx,Textures,Alphablending,如何在DX 9中仅混合纹理的某些部分 例如,Photoshop中的图层(或任何其他支持图层的照片编辑程序)。 你可以在一个图层上画一些东西(背景用alpha填充),然后把图层放在原始图像上(在屏幕上画纹理),这样就得到了原始图像+我在图层上画的东西 是的,我知道我的英语不是很“闪亮” 提前,非常感谢 另外,我的纹理的背景用alpha填充。所以你已经在你想要覆盖的纹理上设置了alpha,使得0是透明的(即显示下面的内容),而1是不透明的(即显示覆盖纹理) 如果是这样,则只需设置一个简单的混合模式:

如何在DX 9中仅混合纹理的某些部分

例如,Photoshop中的图层(或任何其他支持图层的照片编辑程序)。
你可以在一个图层上画一些东西(背景用alpha填充),然后把图层放在原始图像上(在屏幕上画纹理),这样就得到了原始图像+我在图层上画的东西

是的,我知道我的英语不是很“闪亮”

提前,非常感谢


另外,我的纹理的背景用alpha填充。

所以你已经在你想要覆盖的纹理上设置了alpha,使得0是透明的(即显示下面的内容),而1是不透明的(即显示覆盖纹理)

如果是这样,则只需设置一个简单的混合模式:

pDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
pDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );
pDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );

一定要先画背景!还请注意,0到1之间的值表示背景和覆盖纹理之间的线性插值。

我启用了AlphaBlend,并完成了您所说的所有其他操作,但似乎每当我设置这些渲染状态时:pDevice->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_SRCALPHA);pDevice->SetRenderState(D3DRS\u SRCBLEND,D3DBLEND\u INVSRCALPHA);纹理显示为全黑色。哦,顺便说一下,我的游戏是2D的,我一整天都在想我使用的FVF中的RHW是否与我遇到的问题有关。再次衷心感谢,提前!哦,我希望我没有误用这些评论。背景是什么颜色的?顶点颜色设置为什么?背景颜色为D3DCOLOR_XRGB(150200255)。顶点颜色都是D3DCOLOR_ARGB(255、255、255、255),不过我也尝试了一些其他颜色。这样可以方便地查看纹理及其alpha通道。这里的代码将两次设置源混合因子。对于标准alpha混合,您需要
pDevice->SetRenderState(d3drsdstlend,D3DBLEND_INVSRCALPHA)