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:"<