Terrain.h
上传用户:hkb425
上传日期:2007-06-16
资源大小:34191k
文件大小:2k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. // Terrain.h: interface for the CTerrain class.
  2. //作者:吴雪平  2002-6-17日修改
  3. //画地形
  4. //////////////////////////////////////////////////////////////////////
  5. #if !defined(AFX_TERRAIN_H__A574B9A8_37A1_4B50_AE15_C397FFC404BB__INCLUDED_)
  6. #define AFX_TERRAIN_H__A574B9A8_37A1_4B50_AE15_C397FFC404BB__INCLUDED_
  7. #if _MSC_VER > 1000
  8. #pragma once
  9. #endif // _MSC_VER > 1000
  10. #include "structdef.h"
  11. #include "FrustumCull.h"
  12. #include "heightmap.h"
  13. #include "normal.h"
  14. #define   TEX_TYPE 1  //贴图的丰富程度,为了节约,只用一种
  15. class CTerrain  
  16. {
  17. public:
  18. CTerrain();
  19. bool    InitTerrain();
  20. void    UpdateTerrainmap();
  21. void    RendTerrain();
  22. void    RestoreDrawMap();
  23. virtual ~CTerrain();
  24. int     GetNumTriangles();
  25. protected:
  26. void    RenderTerrainTile(int x,int z);
  27.     void    DrawLevel_1(int x,int z);
  28.     void    DrawLevel_2(int x,int z);
  29.     void    DrawLevel_3(int x,int z);
  30.     void    DrawLevel_4(int x,int z);
  31.     void    DrawLevel_5(int x,int z);
  32.     void    DrawLevel_6(int x,int z);
  33.     void    DrawLevel_7(int x,int z);
  34. void    LevelChoose(int level,int x,int z);
  35. void    FillMovemap();
  36. void    UpdateLODmap();                    //将视区内要画的点做记号
  37. void    ProcessLine(int startX,int StartZ);//处理(X,Y,Z)到视点连线之间的点
  38. int     GetPos(int x,int z);
  39. int     GetXpos(int x,int z);
  40. int     GetZpos(int x,int z);
  41. void    DrawTerrainStrip(int X,int Z);
  42. CFrustumCull     cFrustumCull;
  43.     CHeightmap       m_cHmap;
  44.     TERRAIN_SKIN     Skinmap[64][64];
  45. unsigned short   NormalIndex[256*256];
  46. unsigned char    LODmap[256][256];
  47. unsigned char    DrawMap[256][256];
  48. int offsetx;
  49. int offsetz;
  50. float biasX;
  51. float biasZ;
  52. int radius,maxx,minx,maxz,minz;
  53. CNormal          cNormal;
  54. //黄土地到草地的过渡贴图4幅,对应TerSkin1-4.skn
  55. //通过4副图产生16种贴法
  56. unsigned int     Blend[4];         
  57. unsigned int     BaseA[TEX_TYPE];  //黄土地贴图1幅
  58. unsigned int     BaseB[TEX_TYPE];  //草地贴图1幅
  59. unsigned int     Detail[2];        //给近处的地面加上细节贴图
  60.     int              numTriangles;  //记录画三角形个数
  61. };
  62. #endif // !defined(AFX_TERRAIN_H__A574B9A8_37A1_4B50_AE15_C397FFC404BB__INCLUDED_)