⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cbg.cpp

📁 3D俄罗斯方块源码.rar
💻 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 + -