DXUTGUI控件的定制(二)
来源:互联网 发布:杰夫格林体测数据 编辑:程序博客网 时间:2024/05/16 14:07
<!--版权所有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,转载请注明出处!!-->
- DXUTGUI控件的定制(二)
- DXUTGUI控件的定制
- DXUTGUI控件的定制(一)
- DXUTGUI控件的定制(三)
- 【ZT】DXUTGUI控件的定制
- 简单定制Android控件(3) - 打造通用的PopupWindow(二)
- 定制自己的控件
- android自定义控件(一),组合控件Titlebar的定制
- ReportNg测试报告的定制修改(二)
- SpringMVC的RESTful(二)定制格式
- Winform DevExpress控件库(二) 使用SplashScreenManager控件定制程序加载页面
- 控件定制
- Feature的定制和部署二(简便开发)
- 手把手教你定制自己的RTC(二)
- win CE 操作系统的定制及注意事项(二)
- 利用InjectedBundle定制自己的Webkit(二)
- Hadoop学习之Hadoop集群的定制配置(二)
- Hadoop学习之Hadoop集群的定制配置(二)
- FCKeditor编辑器在JAVA中的使用与配置
- log4j详解
- 常用正则表达式源码
- C++编程获得某台机器的IP地址
- 欢迎光临QQ群:10885799(JAVA 前辈 集中营)
- DXUTGUI控件的定制(二)
- QRACLE 性能优化
- xmlhttp对象的简单封装
- 深入了解 Windows Server 2008 内核变化
- xslt2.0 正则表达式
- SharePoint Portal Server 2003 安装图解
- 用 Eclipse 平台进行 C/C++ 开发
- java连接sqlServer2005
- SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY (插入后如何获取自增列的值)