📄 cbg.cpp
字号:
//--------------------------------------------------------------
/**\!File
*
*File name:CBG.cpp
*
*His:add by honghaier @2004/4/28
*
*Desc:背景
*/
//---------------------------------------------------------------
#include "CBG.h"
//---------------------------------------------------------------
CBG::CBG()
{
g_pd3dDevice = NULL; // D3D设备
g_pVB = NULL; // 顶点缓冲区
g_pTexture = NULL; // 纹理
g_pTexture2 = NULL; // 纹理
g_u1=0.0;
g_v1=1.0;
}
HRESULT CBG::Init(LPDIRECT3DDEVICE8 _pd3dDevice)
{ g_pd3dDevice=_pd3dDevice;
// 从一个文件创建我们的纹理
if( FAILED( D3DXCreateTextureFromFile( g_pd3dDevice, "tex\\sky.jpg",
&g_pTexture ) ) )
return E_FAIL;
if( FAILED( D3DXCreateTextureFromFile( g_pd3dDevice, "tex\\lightmap.bmp",
&g_pTexture2 ) ) )
return E_FAIL;
// 创建顶点缓冲区
if( FAILED( g_pd3dDevice->CreateVertexBuffer( 2*2*sizeof(CUSTOMVERTEX),
0, D3DFVF_CUSTOMVERTEX,
D3DPOOL_DEFAULT, &g_pVB ) ) )
{
return E_FAIL;
}
return S_OK;
}
void CBG::Cleanup()
{
// 释放纹理
if( g_pTexture != NULL )
g_pTexture->Release();
}
void CBG::Render()
{
// 指定渲染源
g_pd3dDevice->SetStreamSource( 0, g_pVB, sizeof(CUSTOMVERTEX) );
// 指定自定义的FVF
g_pd3dDevice->SetVertexShader( D3DFVF_CUSTOMVERTEX );
g_pd3dDevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_ONE);
g_u1+=0.001;
if(g_u1>1.0)g_u1-=1.0;
g_v1=1+g_u1;
// --渲染图形--
CUSTOMVERTEX* pVertices;
g_pVB->Lock( 0, 0, (BYTE**)&pVertices, 0 );
for( DWORD i=0; i<2; i++ )
{
pVertices[2*i+0].position = D3DXVECTOR3( i*240,0.0f, 0.0);
pVertices[2*i+0].color = 0x7fffffff;
pVertices[2*i+0].tu = ((FLOAT)50-i)/(50-1);
pVertices[2*i+0].tv = 0.0f;
pVertices[2*i+0].tu2 = g_u1;
pVertices[2*i+0].tv2 = ((FLOAT)50-i)/(50-1);
pVertices[2*i+1].position = D3DXVECTOR3( i*240, -300.0f, 0.0 );
pVertices[2*i+1].color = 0xffffffff;
pVertices[2*i+1].tu = ((FLOAT)50-i)/(50-1);
pVertices[2*i+1].tv = 1.0f;
pVertices[2*i+1].tu2 = g_v1;
pVertices[2*i+1].tv2 = ((FLOAT)50-i)/(50-1);
}
g_pVB->Unlock();
// 指定贴图
g_pd3dDevice->SetTexture( 0, g_pTexture );
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_MODULATE );
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_COLORARG2, D3DTA_DIFFUSE );
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 );
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE);
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_TEXCOORDINDEX, 1 );
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_MAGFILTER, D3DTEXF_LINEAR );
g_pd3dDevice->SetTextureStageState( 0, D3DTSS_MINFILTER, D3DTEXF_LINEAR);
g_pd3dDevice->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_SRCALPHA);
g_pd3dDevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);
g_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,TRUE);
/* D3DCAPS8 stCaps;
g_pd3dDevice->GetDeviceCaps(&stCaps);
int NumStages=stCaps.MaxTextureBlendStages;
if (NumStages>1)
{
g_pd3dDevice->SetTexture( 1, g_pTexture2 );
g_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLOROP, D3DTOP_ADD);
g_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG1, D3DTA_TEXTURE );
g_pd3dDevice->SetTextureStageState( 1, D3DTSS_COLORARG2, D3DTA_CURRENT);
g_pd3dDevice->SetTextureStageState( 1, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 );
g_pd3dDevice->SetTextureStageState( 1, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE);
g_pd3dDevice->SetTextureStageState( 1, D3DTSS_TEXCOORDINDEX, 0 );
g_pd3dDevice->SetTextureStageState( 1, D3DTSS_MAGFILTER, D3DTEXF_LINEAR );
g_pd3dDevice->SetTextureStageState( 1, D3DTSS_MINFILTER, D3DTEXF_LINEAR );
g_pd3dDevice->SetRenderState(D3DRS_SRCBLEND,D3DBLEND_SRCALPHA);
g_pd3dDevice->SetRenderState(D3DRS_DESTBLEND,D3DBLEND_INVSRCALPHA);
g_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,TRUE);
}*/
// 渲染
g_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2*2-2 );
g_pd3dDevice->SetTexture( 0,NULL);
g_pd3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,FALSE);
//g_pd3dDevice->SetTexture(1,NULL);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -