繁体   English   中英

DirectX9中的Alpha混合问题

[英]Alpha Blending problems in DirectX9

我非常渴望在DirectX中获得所需的alpha混合结果。 我尝试绘制纹理,并在其上绘制彩色三角形条。

尽管进行了所有尝试,但似乎条的颜色仍受之前绘制的纹理的颜色影响。 即使将D3DRS_ALPHABLENDENABLE设置为FALSE,我仍然看到受影响的颜色。

这是图像的外观(使用openGL渲染)

在此处输入图片说明

这是我使用DirectX渲染得到的:

在此处输入图片说明

如您所见,第二个图像紫色条带没有任何特定原因的黄色阴影:((黄色矩形是纹理,而不是多边形)。

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

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混合的唯一设置,但是我绝不能实现多边形的正确混合。 有帮助吗?

我终于想通了。 除了Alpha Blending外,还有Color Blending。 因此DirectX将最后一个纹理的颜色与最后一个图元合并。 为了解决这个问题,我们需要设置:

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

在绘制图元之前-表示仅从图元(漫反射)中获取颜色,并且:

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

绘制纹理之前-只能使用纹理颜色。

旧话题,但有用的!

我注意到了一个小细节,只是为了避免造成混淆:我认为SetTextureStageState的参数应该是D3DTOP_SELECTARG1而不是D3DTSS_COLORARG1 (无论如何,值都一样,所以没什么大不了的!)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM