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;
}