|
|
我现在想实现在一张大图中用一个alpha的小图实现加亮效果,但是我看到多重纹理混合没法指定区域混合,
两张图必须是全部区域混合,即使指定 顶点uv的位置,它也是一起按这个指定区域的uv混合,没有办法做大图一个指定区域,小图全部区域的混合。
请问不用多重纹理混合,还有用其他的什么方法来实现这个功能?
代码如下:
float tw= 1.0f/60;
float xx = vecHitArea.x/ room_width_size ;
float yy = 1-vecHitArea.y/ room_height_size;
CUSTOMVERTEX* pVertices;
g_pVB2->Lock( 0, 0, (void**)&pVertices, 0 );
float size = 1.0f ;
CUSTOMVERTEX cvVertices[] =
{
{D3DXVECTOR3(-size,-size,0), D3DCOLOR_XRGB(0, 0, 255),xx-tw,yy+tw,}, //Vertex 0 - Blue
{D3DXVECTOR3(-size,size,0), D3DCOLOR_XRGB(255, 255, 0),xx-tw,yy-tw,}, //Vertex 2 - Red
{D3DXVECTOR3(size, -size, 0), D3DCOLOR_XRGB(255, 0, 0),xx+tw,yy+tw,}, //Vertex 1 - Red
{D3DXVECTOR3(size, size, 0), D3DCOLOR_XRGB(0, 255, 0),xx+tw,yy-tw,}, //Vertex 3 - Green
};
memcpy(pVertices, cvVertices, sizeof(cvVertices));
g_pVB2->Unlock();
//g_pd3dDevice->SetRenderTarget
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_DISABLE );
g_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_DISABLE );
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE);
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);
g_pd3dDevice->SetTexture( 0, g_pTextureTemplate );
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_TEXCOORDINDEX, 0 );
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1 );
g_pd3dDevice->SetTexture( 1, g_pTexture2 );
g_pd3dDevice->SetTextureStageState( 1, D3DTSS_TEXCOORDINDEX, 0 );
g_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG1, D3DTA_TEXTURE );
g_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG2, D3DTA_CURRENT );
g_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_MODULATE );
g_pd3dDevice->SetStreamSource( 0, g_pVB2, 0, sizeof(CUSTOMVERTEX) );
g_pd3dDevice->SetFVF( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2);

|
-
|