📄 lodterrain.h
字号:
#ifndef LODTerrain_Include
#define LODTerrain_Include
#define MOUNTAIN_C1 D3DCOLOR_XRGB(10,20,220)
#define MOUNTAIN_C2 D3DCOLOR_XRGB(123,180,118)
#define MOUNTAIN_C3 D3DCOLOR_XRGB(0,167,80)
#define MOUNTAIN_C4 D3DCOLOR_XRGB(23,123,48)
#define MOUNTAIN_C5 D3DCOLOR_XRGB(110,100,80)
#define MOUNTAIN_C6 D3DCOLOR_XRGB(255,55,255)
#define CUSTOMVERTEX_FVF (D3DFVF_XYZ|D3DFVF_DIFFUSE)
struct CUSTOMVERTEX{
float x,y,z;
D3DXCOLOR color;
CUSTOMVERTEX(){}
CUSTOMVERTEX(float a,float b,float c,D3DCOLOR f){
x=a;
y=b;
z=c;
color=f;
}
};
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -