www.pudn.com > Balls.rar > Quad.cpp, change:2008-10-06,size:2137b


#include "StdAfx.h" 
#include ".\Quad.h" 
 
CQuad::CQuad(void) : 
m_pDevice(NULL), 
m_pMeshVertices(NULL), 
m_pTexture(NULL), 
m_nNumVertsAlongX(2), 
m_nNumVertsAlongZ(2), 
m_fMeshLengthAlongX(10.0f), 
m_fMeshLengthAlongZ(10.0f) 
{ 
} 
 
CQuad::~CQuad(void) 
{ 
	SAFE_RELEASE(m_pMeshVertices); 
	SAFE_RELEASE(m_pTexture); 
} 
 
void CQuad::Init(LPDIRECT3DDEVICE9 pDevice, float fSizeX, float fSizeZ) 
{ 
	m_pDevice = pDevice; 
 
	m_fMeshLengthAlongX = fSizeX; 
	m_fMeshLengthAlongZ = fSizeZ; 
 
	if( FAILED( D3DXCreateTextureFromFile(m_pDevice, "wood.dds", &m_pTexture) ) ) 
		m_pTexture = NULL; 
 
	m_pDevice->CreateVertexBuffer( 4*sizeof(QuadVertex), 
								   D3DUSAGE_WRITEONLY, QuadVertex::FVF_Flags, 
								   D3DPOOL_MANAGED, &m_pMeshVertices, NULL ); 
 
	static QuadVertex *v; 
 
	m_pMeshVertices->Lock( 0, 0, (void**)&v, 0 ); 
 
	for( int i = 0; i  4; ++i ) 
	{ 
		v[i].color = D3DCOLOR_COLORVALUE(1.0f,1.0f,1.0f,1.0f); 
	} 
 
	float fMinXPos = m_fMeshLengthAlongX * -1.0f; 
	float fMaxXPos = m_fMeshLengthAlongX * 1.0f; 
	float fMinZPos = m_fMeshLengthAlongZ * -1.0f; 
	float fMaxZPos = m_fMeshLengthAlongZ * 1.0f; 
 
	// ³υΚΌ»― 
	// 0 ___ 1 
	//  |  /| 
	//  |/__| 
	// 2    3 
 
	v[0].x = fMinXPos; 
	v[0].z = fMaxZPos; 
	v[0].y = 25; 
	v[1].x = fMaxXPos; 
	v[1].z = fMaxZPos; 
	v[1].y = 0; 
	v[2].x = fMinXPos; 
	v[2].z = fMinZPos; 
	v[3].x = fMaxXPos;   
	v[3].z = fMinZPos; 
 
	v[0].tu = 0; 
	v[0].tv = 1; 
	v[1].tu = 0; 
	v[1].tv = 0; 
	v[2].tu = 1; 
	v[2].tv = 1; 
	v[2].y = 25.f; 
	v[3].tu = 1; 
	v[3].tv = 0; 
	v[3].y = 0; 
 
	m_pMeshVertices->Unlock(); 
} 
 
void CQuad::Render( D3DXMATRIX& matWorld ) 
{ 
	m_pDevice->SetSamplerState( 0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR ); 
	m_pDevice->SetSamplerState( 0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR ); 
 
	m_pDevice->SetTransform( D3DTS_WORLD, &matWorld ); 
	m_pDevice->SetStreamSource( 0, m_pMeshVertices, 0, sizeof(QuadVertex) ); 
	m_pDevice->SetFVF( QuadVertex::FVF_Flags ); 
	m_pDevice->SetTexture(0, m_pTexture); 
	m_pDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 ); 
} 
float CQuad::GetHeight(D3DXVECTOR3 vec) 
{ 
	return 25.f - ((vec.x) - (-50.f))  /4.f; 
}