www.pudn.com > 3D_Tank.rar > Sky.cpp


#include "Sky.h" 
 
Sky::Sky() 
{ 
	m_vPosition = D3DXVECTOR3(130.0f, -300.0f , 240.0f); 
} 
 
Sky::~Sky() 
{} 
 
Sky::Init(const CComPtr &device) 
{ 
	HRESULT hr; 
	m_pDevice = device; 
 
	IDirect3DTexture9 *tex = 0; 
	hr =D3DXCreateTextureFromFile(m_pDevice.Get(), ".\\res\\Texture\\sky.jpg", &tex); 
	m_pTexture.Reset(tex); 
 
	ID3DXMesh	*mesh  = 0; 
	ID3DXBuffer *bufferMtrl  = 0; 
	DWORD		dwMtrl = 0; 
	hr = D3DXLoadMeshFromX(".\\res\\Model\\sky.x", D3DXMESH_MANAGED, m_pDevice.Get(), 0,  
						   &bufferMtrl, 0, &dwMtrl, &mesh); 
	if (FAILED(hr)) 
	{	HrError(hr);} 
	m_pMesh.Reset(mesh); 
 
	if (bufferMtrl != 0 && dwMtrl != 0) 
	{ 
		D3DXMATERIAL *mtrl = (D3DXMATERIAL*)bufferMtrl->GetBufferPointer(); 
 
		for (DWORD dw = 0; dw < dwMtrl; ++dw) 
		{ 
			mtrl[dw].MatD3D.Ambient = mtrl[dw].MatD3D.Diffuse; 
			m_vecMaterial.push_back(mtrl[dw].MatD3D); 
		} 
	} 
	bufferMtrl->Release(); 
	return TRUE; 
} 
 
VOID Sky::PrepareRenderState() 
{ 
	D3DXMATRIX matTranslation; 
	GenerateTranslationMatrix(&matTranslation, m_vPosition, 0, 0, 0);  
 
	D3DXMATRIX mat; 
	D3DXMatrixScaling( &mat, 3, 5, 3 ); 
 
    matTranslation *= mat; 
	m_pDevice->SetTransform(D3DTS_WORLD, &matTranslation); 
} 
 
VOID Sky::ResetRenderState() 
{ 
	D3DXMATRIX I; 
	D3DXMatrixIdentity(&I); 
	m_pDevice->SetTransform(D3DTS_WORLD, &I); 
} 
 
BOOL Sky::Render() 
{ 
	PrepareRenderState(); 
	m_pDevice->SetRenderState(D3DRS_LIGHTING, FALSE); 
	HRESULT hr = m_pDevice->SetTexture(0, m_pTexture.Get()); 
	if (FAILED(hr)) 
	{	HrError(hr);} 
 
	m_pDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); 
	m_pDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR); 
	for (UINT i = 0; i < m_vecMaterial.size(); ++i) 
	{ 
		m_pDevice->SetMaterial(&m_vecMaterial[i]); 
		m_pMesh->DrawSubset(i); 
	} 
	ResetRenderState(); 
	return TRUE; 
} 
 
D3DXVECTOR3& Sky::GetPosition() 
{ 
	return m_vPosition; 
} 
 
VOID Sky::SetPosition(D3DXVECTOR3 *pos) 
{ 
	m_vPosition = (*pos); 
} 
 
string Sky::GetPositionString() 
{ 
	std::ostringstream oss; 
	oss<<"x:"<