📄 map.cpp
字号:
// Map.cpp: implementation of the CMap class.
//
//////////////////////////////////////////////////////////////////////
#include "Map.h"
// 自定义顶点结构
struct MAPVERTEX
{
FLOAT x, y, z; // 顶点坐标
FLOAT tu, tv;
};
#define D3DFVF_MAP_VERTEX (D3DFVF_XYZ|D3DFVF_TEX1)
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMap::CMap(LPDIRECT3DDEVICE9 pD3DDevice,float Width,float Height)
{
m_pD3DDevice=pD3DDevice;
m_iWidth=Width;
m_iHeight=Height;
m_fCenterX=0.0f;
m_fCenterZ=0.0f;
}
CMap::~CMap()
{
if(m_pTexture!=NULL)
m_pTexture->Release();
if(m_pVB!=NULL)
m_pVB->Release();
}
VOID CMap::Render()
{
D3DXMATRIXA16 matWorld;
D3DXMatrixTranslation( &matWorld, -m_fCenterX,0.0f,-m_fCenterZ);
m_pD3DDevice->SetTransform( D3DTS_WORLD, &matWorld );
m_pD3DDevice->SetTexture( 0, m_pTexture );
m_pD3DDevice->SetTextureStageState( 0, D3DTSS_COLOROP, D3DTOP_SELECTARG1 );
m_pD3DDevice->SetTextureStageState( 0, D3DTSS_COLORARG1, D3DTA_TEXTURE );
m_pD3DDevice->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_DISABLE );
m_pD3DDevice->SetStreamSource(0,m_pVB,0,sizeof(MAPVERTEX));
m_pD3DDevice->SetFVF(D3DFVF_MAP_VERTEX);
m_pD3DDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP,0,2);//top
}
HRESULT CMap::InitMap(char *strTextureFilePath)
{
//初始化定点缓冲区
MAPVERTEX vertices[]=
{
{-m_iWidth/2,0.0f,-m_iHeight/2,0.0f,10.0f,},
{-m_iWidth/2,0.0f,m_iHeight/2,0.0f,0.0f},
{m_iWidth/2,0.0f,-m_iHeight/2,10.0f,10.0f},
{m_iWidth/2,0.0f,m_iHeight/2,10.0f,0.0f},
};
if(FAILED(m_pD3DDevice->CreateVertexBuffer(4*sizeof(MAPVERTEX),
0,D3DFVF_MAP_VERTEX,
D3DPOOL_DEFAULT,&m_pVB,NULL)))
{
return E_FAIL;
}
VOID* pVertices;
if(FAILED(m_pVB->Lock(0,sizeof(vertices),(void **)&pVertices,0)))
{
return E_FAIL;
}
memcpy(pVertices,vertices,sizeof(vertices));
m_pVB->Unlock();
return D3DXCreateTextureFromFile(m_pD3DDevice,strTextureFilePath,&m_pTexture);
}
VOID CMap::SetCenter(FLOAT x, FLOAT z)
{
m_fCenterX=x;
m_fCenterZ=z;
}
VOID CMap::GetCenter(FLOAT *x, FLOAT *z)
{
*x=m_fCenterX;
*z=m_fCenterZ;
}
VOID CMap::CenterTranslation(FLOAT x, FLOAT z)
{
m_fCenterX+=x;
m_fCenterZ+=z;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -