查看文章 |
第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 =
//肅︹ v[0].diffuse = v[1].diffuse = v[2].diffuse = v[3].diffuse = diffuse ;
v[1].tu = v[2].tu = v[2].tv = v[3].tv = //砞酶瓜家Α 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 ));//最后一个参数为颜色,包括透明度
效果图
|




