查看文章
 
【游戏开发】WelfGame【第3讲】(08120203图像透明及颜色)
2008-12-07 16:10

第3讲 WelfGame【图像透明及颜色】

http://hi.baidu.com/welflau/希望能保留原创作者链接,

【一】、实现透明图像

1 RenderScene()中添加设置代码

在背景绘制前添加:

              d3d_Device->SetRenderState( D3DRS_CULLMODE , D3DCULL_NONE );

              d3d_Device->SetRenderState( D3DRS_ZENABLE , D3DZB_FALSE );

              d3d_Device->SetRenderState( D3DRS_SHADEMODE , D3DSHADE_FLAT );

              d3d_Device->SetRenderState( D3DRS_ALPHABLENDENABLE, FALSE );

在前景绘制的前面添加

       d3d_Device->SetRenderState( D3DRS_SRCBLEND , D3DBLEND_SRCALPHA );

       d3d_Device->SetRenderState( D3DRS_DESTBLEND , D3DBLEND_INVSRCALPHA );

       d3d_Device->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );//开启混色

效果

2 d3dTexture添加BltFast函数

void d3dTexture::BltFast(int l , int t , int r , int b , DWORD diffuse )

{

       D3DTLVERTEX v[4] ;

       //郴翴 挡篶

       memset( v , 0 , sizeof( v ));

       v[0].x = v[3].x = (float)(l) ;

       v[1].x = v[2].x = (float)(r);

       v[0].y = v[1].y = (float)(t);

       v[2].y = v[3].y = (float)(b);

       v[0].rhw = v[1].rhw = v[2].rhw = v[3].rhw =

       v[0].z = v[1].z = v[2].z = v[3].z = 0.5f ;

       //肅︹

       v[0].diffuse = v[1].diffuse = v[2].diffuse = v[3].diffuse = diffuse ;

       v[1].tu = v[2].tu = 1.0f ;

       v[2].tv = v[3].tv = 1.0f ;

       //砞酶瓜家Α

       d3d_Device->SetTexture( 0 , m_Texture );

       d3d_Device->SetFVF( D3DFVF_TLVERTEX );

       d3d_Device->DrawPrimitiveUP( D3DPT_TRIANGLEFAN , 2 , (LPVOID)v , sizeof( D3DTLVERTEX ));

}

添加以下几句:

       d3d_Device->SetTextureStageState( 0 , D3DTSS_ALPHAARG1 , D3DTA_TEXTURE );

       d3d_Device->SetTextureStageState( 0 , D3DTSS_ALPHAARG2 , D3DTA_DIFFUSE );

       d3d_Device->SetTextureStageState( 0 , D3DTSS_COLORARG1 , D3DTA_TEXTURE );

       d3d_Device->SetTextureStageState( 0 , D3DTSS_COLORARG2 , D3DTA_DIFFUSE );

       d3d_Device->SetTextureStageState( 0 , D3DTSS_COLOROP , D3DTOP_SELECTARG1 );

       d3d_Device->SetTextureStageState( 0 , D3DTSS_ALPHAOP , D3DTOP_MODULATE );

       //以下为前景

       m_Role.BltFast( 100, 100, 250 ,250 ,D3DCOLOR_ARGB( 128 , 255 , 255 , 255 ));//最后一个参数为颜色,包括透明度

效果图


类别:【游戏开发】||添加到搜藏 |分享到i贴吧|浏览(2968)|评论 (0)
 
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu