麒麟子

~~

导航

<2009年4月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

统计

常用链接

留言簿(12)

随笔分类

随笔档案

Friends

WebSites

积分与排名

最新随笔

最新评论

阅读排行榜

评论排行榜

透明纹理

对于一些纹理,我们不要求全部显示出来,如用公告板显示的一棵树的纹理,此时就要求让背景不显示出来,只显示树的部分。
//首先图片的背景要处理成透明,显然我们看到是透明的了,但是对于计算机来说,同样会将透明背景后的物品遮住。
//此时就要在渲染纹理前对其进行ALPHA混合

/*

alpha测试根据当前像素是否满足alpha测试条件(即是否达到一定的透明度)来控制是否绘制该像素,图形程序应用alpha测试可以有效地屏蔽某些像素颜色。与alpha混合相比,alpha测试不将当前像素的颜色与颜色缓冲区中像素的颜色混合,像素要么完全不透明,要么完全透明。由于无需进行颜色缓冲区的读操作和颜色混合,因此alpha测试在速度上要优于alpha混合。

比如一棵树,我们将它的背景ALPHA值设置为小于1。0,那么,我们可以将ALPHAREF 设置为1。0 即0x000000ff 然后ALPHAFUNC 设置为GREATEREQUAL (>=) 所以,只有当ALPHA值大于等于1的部份被渲染,这样树的背景就不用画了!
*/

 g_pMyd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE,   TRUE );//开启ALPHA混合功能
 g_pMyd3dDevice->SetRenderState( D3DRS_SRCBLEND,  D3DBLEND_SRCALPHA);//设置源混合因子为(As,As,As,As)
 g_pMyd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);//设置目标混合因子为(1-As,1-As,1-As,1-As);

 g_pMyd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE, TRUE );//开启ALPHA测试功能
 g_pMyd3dDevice->SetRenderState( D3DRS_ALPHAREF,        0x0f );//设置ALPHA测试参考值
 g_pMyd3dDevice->SetRenderState( D3DRS_ALPHAFUNC,D3DCMP_GREATEREQUAL );//设置APLHA测试比较规则


//在此处加载纹理和渲染


在渲染完毕后,不要忘了关闭开启的功能

 g_pMyd3dDevice->SetRenderState( D3DRS_ALPHATESTENABLE, FALSE );
 g_pMyd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, FALSE );

  

posted on 2009-04-18 10:00 麒麟子 阅读(942) 评论(0)  编辑 收藏 引用 所属分类: DirectX


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理