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

📄 terrain.h

📁 国外网游源码....除工具源码缺少之外,其余程序都全...至于,什么游戏,因为国内还没有,所以找不到测试
💻 H
字号:
// Terrain.h: interface for the CTerrain class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_TERRAIN_H__1E862FA9_9700_4156_96AC_E241005BE200__INCLUDED_)
#define AFX_TERRAIN_H__1E862FA9_9700_4156_96AC_E241005BE200__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

/*
struct TERRAINDATA
{
	BYTE	nIndex;
	BYTE	nMainTexID;

//	BYTE	nTileTexX;
//	BYTE	nTileTexZ;

	char *	pHeightBuf;
//	char *	pTuBuf;
//	char *	pTvBuf;

	TERRAINDATA() : nIndex(0), nMainTexID(0), nTileTexX(0), nTileTexZ(0), 
					pHeightBuf(0), pTuBuf(0), pTvBuf(0)
	{
	}

	~TERRAINDATA()
	{
		SAFE_DELETE(pHeightBuf);
		SAFE_DELETE(pTuBuf);
		SAFE_DELETE(pTvBuf);
	}
};
*/
//#pragma pack(4)
struct TERRAINDATA
{
	BYTE	nIndex;
	float *	pfHeightBuf;

	TERRAINDATA() : nIndex(0), pfHeightBuf(0)
	{
	}

	~TERRAINDATA()
	{
		SAFE_DELETE(pfHeightBuf);
	}
};

struct MAPRANGE
{
	BYTE nType;
	float fSx;
	float fSy;
	float fEx;
	float fEy;

	MAPRANGE() : nType(0),fSx(0.0f),fSy(0.0f),fEx(0.0f),fEy(0.0f)
	{
	}

};

struct TERRAINHEADER
{
	BYTE nCountX;
	BYTE nCountY;
	BYTE nWidht;
	BYTE nHeight;
	float fWorldStartX;
	float fWorldStartY;
	float fScaleX;
	float fScaleY;
	float fTextureX;
	float fTextureY;
	BYTE iBaseX;
	BYTE iBaseY;
	MAPRANGE MoveRange;
	BYTE nObjRangeCnt;
	MAPRANGE * pObjRange;
	BYTE nStartRangeCnt;
	MAPRANGE * pStartRange;

	TERRAINDATA	*	pData;

	BYTE nTextureCount;

	TERRAINHEADER() : nCountX(0), nCountY(0), nWidht(0), nHeight(0), fWorldStartX(0.0f), fWorldStartY(0.0f), 
						fScaleX(0.0f), fScaleY(0.0f), fTextureX(0.0f), fTextureY(0.0f), iBaseX(0), iBaseY(0),
						MoveRange(),nObjRangeCnt(0),pObjRange(NULL), nStartRangeCnt(0),pStartRange(NULL), 
						pData(NULL), nTextureCount(0)
	{
	}

	~TERRAINHEADER()
	{
		SAFE_DELETE_ARRAY(pData);
	}
};

struct OBJ_MODEL
{
	BYTE nIndex;
	BYTE nPart;
	BYTE nBreak;
	BYTE nBlend;
//	CMCModel * pModel;
	CMCObject * pObject;
	
	OBJ_MODEL() : nIndex(0), nPart(0),nBreak(0),nBlend(0),pObject(NULL)
	{

	}

	~OBJ_MODEL()
	{
//		SAFE_DELETE(pModel);
	}
};
/*
struct OBJ_PARTS
{
	CMD3Parts *	pPart;
	OBJ_MODEL * pObjModel;
	
	OBJ_PARTS() : pPart(NULL),pObjModel(NULL)
	{

	}

	~OBJ_PARTS()
	{
		SAFE_DELETE(pPart);
	//	SAFE_DELETE(pModel);
	}
};
*/

struct SDIVIDE{
	WORD wIndex;
	int iIndex1;
	int iIndex2;
	int iIndex3;
	D3DXVECTOR2 v2LeftTop;
	D3DXVECTOR2 v2RightTop;
	D3DXVECTOR2 v2LeftBottom;
	D3DXVECTOR2 v2RightBottom;
	int iVertIndexLT;
	int iVertIndexRT;
	int iVertIndexLB;
	int iVertIndexRB;
	SDIVIDE * pChild;
};

typedef vector<SDIVIDE *>	vSDivide;
typedef std::map<WORD , SDIVIDE *>	mapSDivide;

struct SDIVIDEINDEX{
	WORD wIndex;
	WORD wIndexNum[3];
};

typedef std::map<WORD , SDIVIDEINDEX *>	mapSDivideIndex;

struct SDIVIDEMAP{
	//WORD wIndex;
	short iMapLevel;		// 磊弗芭俊 辑凯阑 持磊..	-1 捞恭 滚赴 磊籍..
	D3DXVECTOR3 vMax;
	D3DXVECTOR3 vMin;

	D3DXVECTOR2 v2LeftTop;
	D3DXVECTOR2 v2RightTop;
	D3DXVECTOR2 v2LeftBottom;
	D3DXVECTOR2 v2RightBottom;

//	SDIVIDEMAP * pChildLT;
//	SDIVIDEMAP * pChildRT;
//	SDIVIDEMAP * pChildLB;
//	SDIVIDEMAP * pChildRB;
	//vSDivide * pDivide;
	//mapSDivide * pDivide;
	//mapSDivide	mapDivide;

	int				nIndexBufCount;
	SDIVIDEINDEX *	pIndexBuf;

	SDIVIDEMAP *	pParentDivide;
	int				nChildCount;
	SDIVIDEMAP *	pChildDivide;
	//vSDivide * pChildDivide;
};

struct SDIVIDEMAPEX{
	//WORD wIndex;
	WORD wMapIndex;
	short iMapLevel;		// 磊弗芭俊 辑凯阑 持磊..	-1 捞恭 滚赴 磊籍..
	D3DXVECTOR3 vMax;
	D3DXVECTOR3 vMin;

	D3DXVECTOR3 vCenter;
	float		fRadius;

	D3DXVECTOR2 v2LeftTop;
	D3DXVECTOR2 v2RightTop;
	D3DXVECTOR2 v2LeftBottom;
	D3DXVECTOR2 v2RightBottom;

	D3DXVECTOR3 v3LeftTop;
	D3DXVECTOR3 v3RightTop;
	D3DXVECTOR3 v3LeftBottom;
	D3DXVECTOR3 v3RightBottom;

	int				nIndexBufCount;
	SDIVIDEINDEX *	pIndexBuf;

	SDIVIDEMAPEX *	pParentDivide;
	int				nChildCount;
	SDIVIDEMAPEX *	pChildDivide;
};

typedef std::map<float , SDIVIDEMAPEX *>	mapSDivideEx;	// 坷抚瞒鉴 沥纺
//typedef std::map<float , SDIVIDEMAPEX *, greater<float>>	mapSDivideExMax;	// 郴覆瞒鉴 沥纺

class CBuildObject;
class CBillboard;
class CParticle;

class CGunEmitter;
class CMachineGun;
class CHandGun;
class CDecal;

class CTerrain  
{
public:
	CTerrain();
	virtual ~CTerrain();

	void		Init();
	HRESULT		FindMap( vector<CBaseBuildObject *> &listParts, const char* szFile , BYTE nIndex );
	HRESULT		Create( vector<CBaseBuildObject *> &listParts, const char* szFile=NULL);
	HRESULT		CreateEx( vector<CBaseBuildObject *> &listParts, const char* szFile=NULL );
	HRESULT		CreateShadow( const char* szFile );
	HRESULT		CreateExMap( const char* szFile=NULL );
	HRESULT		CreateSky( const char* szFile=NULL );
	HRESULT		CreateBack( const char* szFile=NULL );
	HRESULT		CreateInfoEx( vector<CBaseBuildObject *> &listParts, const char* szFile = NULL );
	HRESULT		CreateShadowInfo( const char* szFile = NULL );
//	HRESULT		CreateTerrain( int nCntX, int nCntY, int nWidht, int nHeight, float fScale );
	HRESULT		CreateTerrain( int nCntX, int nCntY, int nWidht, int nHeight, float fScaleX, float fScaleY, 
							BOOL bTileMap, BOOL bBaseRender, int nMapTileX, int nMapTileY, int nMapBaseX, int nMapBaseY);		// 埃父俊 粱 持厘.
	HRESULT		SetSplitMap( void );
	bool		CreateFromFile( const char* szFile=NULL, int nCntX=1, int nCntY=1, int nWidht=64, int nHeight=64, float fScale=1.0f );
	void		CleanupTerrain();
	
	HRESULT		InvalidateDeviceObjects();
	HRESULT		RestoreDeviceObjects();

	bool		CreateTerrainfromFile();
	
	HRESULT		CreateIndexVertexBuf();			// 烙矫风 累诀..

	// 甘盒且肺流
	VOID		LoadDivideMap( HANDLE hFile, SDIVIDEMAPEX * pDivideMap );
	VOID		DestroyDivideMeshEx( SDIVIDEMAPEX * pDivideMap );
	DWORD		FindVertexMapEX( float fX, float fZ, SDIVIDEMAPEX * pDivide, int &Count );
	DWORD		FindFireMap( D3DXVECTOR3 vOrg, D3DXVECTOR3 vDir, SDIVIDEMAPEX * pDivide, int &Count );
	DWORD		FindDivMapIndex( SDIVIDEMAPEX * pDivide, WORD nIndex );

public:
	int				GetMaxTerrainCnt() { return m_TerrainCnt; }
	int				GetTerrainWidht() { return m_TerrainX; }
	int				GetTerrainHeight() { return m_TerrainY; }

	int				GetWorldWidth() { return m_dwWorldWidth; }
	int				GetWorldHeight() { return m_dwWorldHeight; }

	FLOAT			GetHeightWorld( float x, float z );
	FLOAT			GetHeightWorld( D3DXVECTOR3 vPos );
	FLOAT			GetHeightWorldEx( float fObjCoordX, float fObjCoordZ );
//	void			GetVertexWorld( float x, float z );

	

//	CTerrainMash *	GetTerrainMash() { return m_pTerrainMash; }

//	CTerrainMash *	GetTerrainMash( int nIndex = 0 ) { return &m_pTerrainMash[nIndex]; }
	CTerrainMash *	GetTerrainMash( int nIndex = 0 ) { return &m_pTerrainMash[nIndex]; }

	VOID			MashRender();
	VOID			RenderTerrain( BOOL bWire );
	VOID			RenderTerrainEx();
	VOID			RenderShwTerrain();
	VOID			RenderExMap();
	VOID			RenderSky();
	VOID			RenderBack();
	VOID			RenderAlphaMap( D3DXMATRIXA16 matTemp );

	inline VOID		SetHeader(TERRAINHEADER * pData, BYTE nCount) 
					{
						m_pTerrainData = pData;
						m_TextureCount = nCount;
					}
	
	// 面倒肺流..
	BOOL			CheckCollision( D3DXVECTOR3 vOrg, D3DXVECTOR3 * vDir, FLOAT fTargetDist, 
									FLOAT * fDist, D3DXVECTOR3 * vCollPos );

	BOOL			CheckCollisionEx( D3DXVECTOR3 vOrg, D3DXVECTOR3 vDir, D3DXVECTOR3 * vCollPos );
//	BOOL			CheckCollisionEx( D3DXVECTOR3 vOrg, D3DXVECTOR3 vDir, FLOAT &fDist, D3DXVECTOR3 &vCollPos, 
//									SDIVIDEMAP * pDivideMap, WORD &wColIndex );
	int				CheckCollisionEx( D3DXVECTOR3 vOrg, D3DXVECTOR3 vDir, FLOAT &fDist, D3DXVECTOR3 &vCollPos, 
									SDIVIDEMAPEX * pDivideMap, WORD &wColIndex );

	BOOL			CheckCollision( D3DXVECTOR3 vOrg, D3DXVECTOR3 vDir, FLOAT fX, FLOAT fZ,
									FLOAT &fDist, D3DXVECTOR3 &vCollPos );

	int				FireCollisionEx( D3DXVECTOR3 vOrg, D3DXVECTOR3 vDir, FLOAT &fDist, 
								D3DXVECTOR3 &vCollPos, SDIVIDEMAPEX * pDivideMap, WORD &wColIndex );

	int				FireCollision( D3DXVECTOR3 vOrg, D3DXVECTOR3 vDir, FLOAT &fDist, 
								D3DXVECTOR3 &vCollPos, SDIVIDEMAPEX * pDivideMap, WORD &wColIndex );

	//BOOL			Targetting( CCollision * pPick );		// い屈 鸥百泼..
	BOOL			TriangleIntersect(PICKING *ptagInfo, DWORD dwPickCnt);		// 瘤屈 面倒..

	void			AddBulidObject( CBaseBuildObject * pObject, D3DXVECTOR3 vPos );
	void			GetZoneFromPt( const float fX, const float fZ, int* pnZoneX, int* pnZoneZ );
	void			GetZone( float fX, float fZ, int &iZoneX, int &iZoneZ );

	DWORD			GetRenderTri() { return m_dwTriangle; }

	CEffectManager *	GetEffectManager() { return m_pEffectManager; }

	void			RenderEffect();

	//MCFVFVERTEX	*	GetVertexMap() { return m_pVertex; }
	MCOBJVERTEX	*	GetVertexMap() { return m_pVertex; }
	MCFVFINDEX	*	GetIndexMap() { return m_pIndex; }
	DWORD			GetVertexBufCount() { return m_iVertexCount; }
	DWORD			GetIndexBufCount() { return m_iFaceCount; }

private:
	bool			MakeAlphaMap( LPDIRECT3DTEXTURE9 &pTex, int nSizeX, int nSizeY, BYTE * pBuf );
	VOID			CullTerrain();

	BOOL			IsOutOfRangeObj( float x, float z );
	float			GetCellHeightObj( float x, float z );

	VOID			FrustumCull( SDIVIDEMAPEX * pDivideMap, CFrustum * pFrustum );
	int				IsInFrustum( SDIVIDEMAPEX * pDivideMap, CFrustum * pFrustum );

	HRESULT			CreateSubBuffer();

	VOID			ReadMeterial( HANDLE hFile, SMETERIALDATA * pMeterial, const char * szFileName );
	VOID			RenderMeterial( SMETERIALDATA * pMeterial );
	VOID			RenderBlendMeterial( SMETERIALDATA * pMeterial );
	MCTEXTUREEX *	FindMeterial( int nClass, int nPass, SMETERIALDATA * pMeterial );
	VOID			DeleteMeterial( SMETERIALDATA * pMeterial );

private:
	int					m_TerrainCnt;
	int					m_TerrainX;
	int					m_TerrainY;
	CTerrainMash *		m_pTerrainMash;

	DWORD				m_dwWorldWidth;
	DWORD				m_dwWorldHeight;
	DWORD				m_dwZoneWidth;
	DWORD				m_dwZoneHeight;

	TERRAINHEADER *		m_pTerrainData;

	LPDIRECT3DTEXTURE9 * m_TerrainTexture;

	BYTE				m_TextureCount;

	short				m_nObjectCount;
	OBJ_MODEL	*		m_pObjModel;

	DWORD				m_dwTriangle;
	DWORD				m_dwMapCount;

	D3DXMATRIX			m_mFrustumProj;

	// 捞蒲飘 瓤苞绰 胺俊辑父 甸绢啊聪瘪.. 傲 咯扁促 持厘.. 烙矫风父..
	CEffectManager	*	m_pEffectManager;

	MCOBJVERTEX	*		m_pVertex;
	MCFVFINDEX *		m_pIndex;
	MCTEXTUREEX **		m_pTexture;
	int					m_nTexCount;
	DWORD				m_iVertexCount;
	DWORD				m_iFaceCount;
	float				m_fMashEndX;
	float				m_fMashEndZ;
	float				m_fMashStartx;
	float				m_fMashStartz;
	float				m_fXSize;
	float				m_fZSize;
	float				m_fXLange;
	float				m_fZLange;

	SMETERIALDATA	*	m_pRootMtl;

	LPDIRECT3DVERTEXBUFFER9		m_pVertexBuffer;
	LPDIRECT3DINDEXBUFFER9		m_pIndexBuffer;
	D3DMATERIAL9 *				m_pMaterials;

	// 溅档快..
	MCFVFVERTEX	*		m_pShadowVertex;
	MCFVFINDEX *		m_pShadowIndex;
	int					m_iShadowVtxCnt;
	DWORD				m_iShadowFaceCnt;

	MCTEXTURE *					m_pShadowTex;
	LPDIRECT3DVERTEXBUFFER9		m_pShwVertexBuffer;
	LPDIRECT3DINDEXBUFFER9		m_pShwIndexBuffer;
	
	// 犬厘 顶..
	MCFVFVERTEX	*		m_pExMapVertex;
	MCFVFINDEX *		m_pExMapIndex;
	MCTEXTURE **		m_pExMapTexture;
	int					m_nExMapTexCount;
	DWORD				m_iExMapVertexCount;
	DWORD				m_iExMapFaceCount;

	LPDIRECT3DVERTEXBUFFER9		m_pExMapVertexBuffer;
	LPDIRECT3DINDEXBUFFER9		m_pExMapIndexBuffer;
	D3DMATERIAL9 *				m_pExMapMaterials;

	// 窍疵捞..
	MCFVFVERTEX	*		m_pSkyVertex;
	MCFVFINDEX *		m_pSkyIndex;
	MCTEXTURE **		m_pSkyTexture;
	int					m_nSkyTexCount;
	DWORD				m_iSkyVertexCount;
	DWORD				m_iSkyFaceCount;

	LPDIRECT3DVERTEXBUFFER9		m_pSkyVertexBuffer;
	LPDIRECT3DINDEXBUFFER9		m_pSkyIndexBuffer;
	D3DMATERIAL9 *				m_pSkyMaterials;

	// 华 硅版..
	MCFVFVERTEX	*		m_pBackVertex;
	MCFVFINDEX *		m_pBackIndex;
	MCTEXTURE **		m_pBackTexture;
	int					m_nBackTexCount;
	DWORD				m_iBackVertexCount;
	DWORD				m_iBackFaceCount;

	LPDIRECT3DVERTEXBUFFER9		m_pBackVertexBuffer;
	LPDIRECT3DINDEXBUFFER9		m_pBackIndexBuffer;
	D3DMATERIAL9 *				m_pBackMaterials;

	// 甘 律暗 沥焊 持磊.. 快秋秋..
	SDIVIDEMAPEX	*	m_pRootDivideMapEx;
	SDIVIDEMAPEX	*	m_pColDivideMapEx[5];
	int					m_nColCountEx;

	SDIVIDEMAPEX	*	m_pRootTest;
	mapSDivideEx		m_vlCullDivideMap;

	LPDIRECT3DINDEXBUFFER9	*	m_pIndexBufferEx;
	vector<WORD>	*			m_pvlIndex;
protected:

public:
	D3DXVECTOR2			m_v2Max;
	D3DXVECTOR2			m_v2Min;

	int					m_nChkCount;
	int					m_nChkCount2;
	float				m_fHeight;
	int					m_nCol;
	
	CDecal		*		m_pDecal;

protected:
	enum				QuadLocation { COMPLETELY_OUT = 0,
									   PARTIALLY_IN = 1,
									   COMPLETELY_IN = 2,
									   UNKNOWN = -1 };

};

#endif // !defined(AFX_TERRAIN_H__1E862FA9_9700_4156_96AC_E241005BE200__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -