2013-02-27 89 views
0

我非常渴望在DirectX中实现所需的alpha混合效果。 我尝试绘制纹理,并在其上彩色三角形条。DirectX9中的Alpha混合问题

尽管我尝试了所有尝试,但看起来条纹的颜色受到以前绘制的纹理颜色的影响。即使我将D3DRS_ALPHABLENDENABLE设置为FALSE,我仍然会看到受影响的颜色。

下面是图像如何猜想的样子(用OpenGL渲染)

enter image description here

这里是我所得到的与DirectX渲染:

enter image description here

正如你所看到的,第二张图像紫色条带有黄色阴影,没有任何特定原因:((黄色矩形是纹理,不是多边形)。

这里是我的引擎使用的初始化设置:

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

m_pDirect3D_Device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_BLENDDIFFUSEALPHA); 
m_pDirect3D_Device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE); 
m_pDirect3D_Device->SetTextureStageState(0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE); 

这些设置是给了我正确的Alpha混合纹理的唯一设置,但我绝不能达到多边形的正确混合。任何帮助?

回答

1

我终于明白了。 除了Alpha Blending,还有一个颜色混合。因此,DirectX会将最后一个纹理的颜色与最后一个基元进行合并。拉丝纹理之前

m_pDirect3D_Device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTSS_COLORARG1); 
m_pDirect3D_Device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE); 

- 这意味着仅使用:这意味着只需要颜色从原始的(扩散),以及 -

m_pDirect3D_Device->SetTextureStageState(0, D3DTSS_COLOROP, D3DTSS_COLORARG1); 
m_pDirect3D_Device->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_DIFFUSE); 

绘制原语前: 为了解决这个问题,我们需要设置纹理的颜色。

+0

非常好。谢谢 – parrowdice 2015-12-07 14:32:43

0

旧主题,但有用的一个!

我注意到一个小细节,只是为了避免有些困惑:我认为参数SetTextureStageState应该D3DTOP_SELECTARG1而不是D3DTSS_COLORARG1(相同的值,无论如何,所以没什么大不了的!)。