DXUTGUI控件的定制(二)

    <!--版权所有foruok,转载请注明出处!!-->    

    DXUTGUI提供的默认控件已经实现了透明效果和类似色彩键的效果。在D3D中没有直接的色彩键(direct draw中有)功能,不过可以利用alpha通道实现类似的效果,只是需要图片具有alpha通道。    

    DXUTGUI的控件纹理正是这样实现的,用photoshop打开保存下来的纹理图片,可以看到其alpha通道的图片。    

    要在D3D9中实现透明和颜色过滤功能,需要两个步骤。

    (1)定义FVF结构体,包含顶点颜色域。定义FVF标记,使其包含D3DFVF_DIFFUSE。    

struct CustomVertext
{        
    float x,y,z,h;        
    DWORD color;    
};    
#define CUSTOMFVF   D3DFVF_XYZRHW | D3DFVF_DIFFUSE

    (2)设置渲染状态:    

pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );    
pd3dDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );    
pd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );        
pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_MODULATE );    
pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );    
pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG2, D3DTA_DIFFUSE );

    透明效果的实现是通过顶点颜色的alpha值(0完全透明,255不透明)实现的,而颜色过滤是通过纹理的alpha通道实现的,两者的乘积可以实现“透明+过滤”效果。这样就可以实现不规则且透明的控件。

    对应在DXUTGUI中,如果要设置某一个控件的透明度,可以调用该控件的GetElement函数,获取CDXUTElement类型的指针,调用其SetTexture函数实现。

    要统一设置某一类控件的透明度,可以调用CDXUTDialog::GetDefaultElement获取该类控件的分子对象的指针,修改其TextureColor成员的alpha通道(或者调用SetTexture函数)。

    知道了DXUTGUI如何实现上述效果,我们就有了定制UI的基础。通过提供具有alpha通道的图片给DXUTGUI使用,就可以随心所欲的实现各种效果的控件了。但如何让DXUTGUI为某一个控件(如一个按钮)使用我们自己的图片,还需要做进一步的挖掘和实现。

     <!--版权所有foruok,转载请注明出处!!-->

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

foruok

你可以选择打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值