lodterrain.h

来自「里内面有两个关于地形的模拟的范例,仔细看一下会收获不小啊」· C头文件 代码 · 共 56 行

H
56
字号
#ifndef LODTerrain_Include
#define LODTerrain_Include
#define CUSTOMVERTEX_FVF (D3DFVF_XYZ|D3DFVF_TEX1)
struct CUSTOMVERTEX{
		float x,y,z;
		float u,v;
		CUSTOMVERTEX(){}
		CUSTOMVERTEX(float a,float b,float c,float d,float e){
			x=a;
			y=b;
			z=c;
			u=d;
			v=e;
		}
};
class CFrustum;
class CCamera;

class CLODTerrain  
{
private:
	LPDIRECT3DDEVICE9 m_pd3dDevice;
	LPDIRECT3DVERTEXBUFFER9 m_pVertexBuffer;
	CFrustum* m_pFrustum;
	bool m_bUseHeightFile;
	int m_iTerrainSize;
	bool* m_pbQuadMat;
	float m_fHeightScale;
	unsigned char* m_pucHeightData;
	float m_fResolution;
	float m_fHeightDetail;
	LPDIRECT3DTEXTURE9  m_pTexture;
	int m_iTexMapRepeatNum;
private:
	bool InitTerrainByFun(TCHAR* szTextureFile);
	bool InitTerrainByFile(TCHAR* szHeightFile,TCHAR* szTextureFile);
	bool InitVertexBuf();
	bool InitQuadMat();
	void SplitNode(float x,float z,int iNodeLength,CCamera* pCamera);
	void TrimNodeSplit(int iX,int iZ,int iNodeLength);
	void RenderNode(float x,float z,int iNodeLength);
	void RenderTriFan(CUSTOMVERTEX* vertex,int iVertexCount);
	float GenerateHeightData(float x,float z);
	void GenerateVertex(float x,float z,CUSTOMVERTEX& vertex);
	bool GetQuadMatData(int x,int z);
	void SetQuadMatData(int x,int z,bool b);
	bool LoadHeightData(TCHAR* szFileName);
	void SetChildNodeFalse(int iX,int iZ,int iNodeLength);
public:
	CLODTerrain(LPDIRECT3DDEVICE9 pd3dDevice,bool bUseHeightFile=true);
	~CLODTerrain();
	bool InitTerrain(TCHAR* szHeightFile,TCHAR* szTextureFile);
	void UpdateTerrain(CCamera* pCamera);
	void Render();
};	
#endif 

⌨️ 快捷键说明

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