⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 map.cpp

📁 3D ARPG类游戏模式Demo(VC)屏幕坐标反向变换到3D坐标应用DirectX9
💻 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 + -