|
|
发表于 2005-4-6 13:27:00
|
显示全部楼层
Re:请教一个阴暗的效果
//声明
struct SHADOWVERTEX
{
D3DXVECTOR4 p;
D3DCOLOR color;
static const DWORD FVF;
};
const DWORD SHADOWVERTEX::FVF = D3DFVF_XYZRHW | D3DFVF_DIFFUSE;
LPDIRECT3DVERTEXBUFFER9 m_pBigSquareVB;
// 创建
if( FAILED( m_pd3dDevice->CreateVertexBuffer( 4*sizeof(SHADOWVERTEX),
D3DUSAGE_WRITEONLY, SHADOWVERTEX::FVF,
D3DPOOL_MANAGED, &m_pBigSquareVB, NULL ) ) )
return E_FAIL;
SHADOWVERTEX* v;
FLOAT sx = (FLOAT)m_d3dsdBackBuffer.Width;
FLOAT sy = (FLOAT)m_d3dsdBackBuffer.Height;
m_pBigSquareVB->Lock( 0, 0, (void**)&v, 0 );
v[0].p = D3DXVECTOR4( 0, sy, 0.0f, 1.0f );
v[1].p = D3DXVECTOR4( 0, 0, 0.0f, 1.0f );
v[2].p = D3DXVECTOR4( sx, sy, 0.0f, 1.0f );
v[3].p = D3DXVECTOR4( sx, 0, 0.0f, 1.0f );
v[0].color = 0x7f000000;
v[1].color = 0x7f000000;
v[2].color = 0x7f000000;
v[3].color = 0x7f000000;
m_pBigSquareVB->Unlock();
// 渲染
m_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, TRUE );
m_pd3dDevice->SetRenderState( D3DRS_SRCBLEND, D3DBLEND_SRCALPHA );
m_pd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );
// Draw a big, gray square
m_pd3dDevice->SetFVF( SHADOWVERTEX::FVF );
m_pd3dDevice->SetStreamSource( 0, m_pBigSquareVB, 0, sizeof(SHADOWVERTEX) );
m_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 );
// Restore render states
m_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, FALSE ); |
|