例如(窗口包含面板和按钮3,面板包含按钮1和按钮2):
我们的问题是在合并曲面时进行正确的Alpha混合计算。我们尝试了不同的配置,但alpha值对所有这些都表现得“奇怪”。最大的问题是alpha孔(完全透明的像素,即使顶层表面(窗口)几乎不透明)。
Device->SetRenderState (D3DRS_ALPHABLENDENABLE, 1 );
Device->SetRenderState (D3DRS_BLENDOP, D3DBLENDOP_ADD );
Device->SetRenderState (D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
Device->SetRenderState (D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
作为快速修复,我们目前正在使用以下渲染状态:
Device->SetRenderState (D3DRS_ALPHABLENDENABLE, 1 );
Device->SetRenderState (D3DRS_BLENDOP, D3DBLENDOP_ADD );
Device->SetRenderState (D3DRS_SEPARATEALPHABLENDENABLE, 1 );
Device->SetRenderState (D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
Device->SetRenderState (D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
Device->SetRenderState (D3DRS_SRCBLENDALPHA, D3DBLEND_ONE );
Device->SetRenderState (D3DRS_DESTBLENDALPHA, D3DBLEND_ONE );
但这些显然是不正确的,因为添加了两个重叠控件的alpha值(使两个127 alpha控件完全不透明)。
是否可以像这样混合曲面:
A = AlphaValue * (ParentAlphaBlend / 255);
祝你好运 Zacherl