Sea.h
上传用户:henghua
上传日期:2007-11-14
资源大小:7655k
文件大小:3k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. #ifndef SEA_H_
  2. #define SEA_H_
  3. #include "comman.h"
  4. #include "NoiseGenerator.h"
  5. #include "MeshObj.h"
  6. #include "BoatWave.h"
  7. // *****************************************
  8. // *****CSea类辅助参量*****
  9. // *****************************************
  10. // **固定参量**
  11. // 海面折射、反射贴图的纹理大小
  12. #define reflrefrdetail 512
  13. #define SEAPOSITION D3DXVECTOR3(0,0,0)
  14. #define SEANORMAL D3DXVECTOR3(0,1,0)
  15. #define SEASIZEX 128
  16. #define SEASIZEY 256
  17. // **枚举类型**
  18. enum rendermode // 点绘制、线框绘制、实体绘制
  19. {
  20. RM_POINTS = 0,
  21. RM_WIREFRAME,
  22. RM_SOLID
  23. };
  24. enum rs_mode { // 渲染目标:反射、折射、实体
  25. rsm_normal=0,
  26. rsm_refraction,
  27. rsm_reflection,
  28. rsm_reflection_backface,
  29. };
  30. // *****************************************
  31. // *****CSea类定义*****
  32. // *****************************************
  33. class CSea
  34. {
  35. // ***数据成员***
  36. public:
  37. // **D3D有关参量**
  38. // D3D设备
  39. LPDIRECT3DDEVICE9 device;
  40. // 顶点缓冲区、索引缓冲区
  41. // 海水
  42. LPDIRECT3DVERTEXBUFFER9 seaVertices;
  43. LPDIRECT3DINDEXBUFFER9 seaIndices;
  44. // 纹理(海面、海面菲涅尔、海下菲涅尔、2D噪声)、(海面折射、海面反射)
  45. LPDIRECT3DTEXTURE9 surf_texture, FresnelMap, underwater_fresnel;
  46. LPDIRECT3DTEXTURE9 SeaRefraMap, SeaReflaMap;
  47. // 效果(海面、海下、天空)
  48. LPD3DXEFFECT SeaEffect;
  49. // 深度模版表面
  50. LPDIRECT3DSURFACE9 new_target, old_target, new_depthstencil, old_depthstencil;
  51. // **计算海面顶点数据的辅助参量**
  52. // 可视范围的逆投影矩阵
  53. D3DXMATRIXA16 extension;
  54. // 基准位置,法向量
  55. D3DXVECTOR3 normal, position;
  56. // 海面网格尺寸
  57. int  sizeX, sizeY;
  58. // 海水基平面,海水上界面,海水下界面:法向量均是(0,1,0),位置分别是(0,海水起伏最大高度,海水起伏最小高度)
  59. D3DXPLANE plane, upPlane, downPlane;
  60. // **与其他类间的通信**
  61. // 噪声场类
  62. CNoiseGenerator *pNoiseGenerator;
  63. // 视角类
  64. CCamera *pCamera; // the camera whose frustum the projection is created for
  65. // 3D模型类集
  66. CMeshObj **ppMeshObj; // 3D模型类数组指针
  67. int num_meshobj; // 3D模型数目
  68. // 参量集控制类
  69. CConfiguration *config;
  70. // 船尾迹类
  71. CBoatWave *pWave;
  72. // **错误控制参量**
  73. bool initialized; // 显示是否顺利初始化
  74. // **海水渲染参数**
  75. bool seaBeSeen; // 位于视景体内判断
  76. // ***函数成员***
  77. public:
  78. // **构造函数流程**
  79. // 构造函数(传入参数:海平面中心位置,海平面法向量,海平面网格尺寸x,y,D3D设备,视角类对象指针,参量集类对象指针)
  80. CSea(const LPDIRECT3DDEVICE9 device, CCamera *tesscamera, CConfiguration *config, CMeshObj **pmesh, int num_mesh, CBoatWave *pW);
  81. ~CSea();
  82. // 初始化创建缓冲区(顶点、索引缓冲区)
  83. bool InitializeBuffers();
  84. bool InitializeTextures();
  85. // 加载效果
  86. void LoadEffect();
  87. // **每桢更新数据流程**
  88. bool Update();
  89. void SetupMatrices(const CCamera *camera_view);
  90. bool CalculateExtension();
  91. // **渲染海面流程**
  92. bool Render();
  93. // 海面反射和折射渲染部分
  94. void RenderRefraction();
  95. void RenderReflection();
  96. void SetSunLight(int mode);
  97. void SetClipPlane(CMeshObj *pM);
  98. void Draw_meshobj(CMeshObj *pM);
  99. void GPUDrawMeshObj(CMeshObj *pM);
  100. // **获取海面处某位置高低**
  101. float get_height_at(float,float);
  102. };
  103. #endif