Sea.h
上传用户:henghua
上传日期:2007-11-14
资源大小:7655k
文件大小:3k
- #ifndef SEA_H_
- #define SEA_H_
- #include "comman.h"
- #include "NoiseGenerator.h"
- #include "MeshObj.h"
- #include "BoatWave.h"
- // *****************************************
- // *****CSea类辅助参量*****
- // *****************************************
- // **固定参量**
- // 海面折射、反射贴图的纹理大小
- #define reflrefrdetail 512
- #define SEAPOSITION D3DXVECTOR3(0,0,0)
- #define SEANORMAL D3DXVECTOR3(0,1,0)
- #define SEASIZEX 128
- #define SEASIZEY 256
- // **枚举类型**
- enum rendermode // 点绘制、线框绘制、实体绘制
- {
- RM_POINTS = 0,
- RM_WIREFRAME,
- RM_SOLID
- };
- enum rs_mode { // 渲染目标:反射、折射、实体
- rsm_normal=0,
- rsm_refraction,
- rsm_reflection,
- rsm_reflection_backface,
- };
- // *****************************************
- // *****CSea类定义*****
- // *****************************************
- class CSea
- {
- // ***数据成员***
- public:
- // **D3D有关参量**
- // D3D设备
- LPDIRECT3DDEVICE9 device;
- // 顶点缓冲区、索引缓冲区
- // 海水
- LPDIRECT3DVERTEXBUFFER9 seaVertices;
- LPDIRECT3DINDEXBUFFER9 seaIndices;
- // 纹理(海面、海面菲涅尔、海下菲涅尔、2D噪声)、(海面折射、海面反射)
- LPDIRECT3DTEXTURE9 surf_texture, FresnelMap, underwater_fresnel;
- LPDIRECT3DTEXTURE9 SeaRefraMap, SeaReflaMap;
-
- // 效果(海面、海下、天空)
- LPD3DXEFFECT SeaEffect;
- // 深度模版表面
- LPDIRECT3DSURFACE9 new_target, old_target, new_depthstencil, old_depthstencil;
- // **计算海面顶点数据的辅助参量**
- // 可视范围的逆投影矩阵
- D3DXMATRIXA16 extension;
- // 基准位置,法向量
- D3DXVECTOR3 normal, position;
- // 海面网格尺寸
- int sizeX, sizeY;
-
- // 海水基平面,海水上界面,海水下界面:法向量均是(0,1,0),位置分别是(0,海水起伏最大高度,海水起伏最小高度)
- D3DXPLANE plane, upPlane, downPlane;
- // **与其他类间的通信**
- // 噪声场类
- CNoiseGenerator *pNoiseGenerator;
- // 视角类
- CCamera *pCamera; // the camera whose frustum the projection is created for
-
- // 3D模型类集
- CMeshObj **ppMeshObj; // 3D模型类数组指针
- int num_meshobj; // 3D模型数目
- // 参量集控制类
- CConfiguration *config;
- // 船尾迹类
- CBoatWave *pWave;
- // **错误控制参量**
- bool initialized; // 显示是否顺利初始化
- // **海水渲染参数**
- bool seaBeSeen; // 位于视景体内判断
-
-
- // ***函数成员***
- public:
- // **构造函数流程**
- // 构造函数(传入参数:海平面中心位置,海平面法向量,海平面网格尺寸x,y,D3D设备,视角类对象指针,参量集类对象指针)
- CSea(const LPDIRECT3DDEVICE9 device, CCamera *tesscamera, CConfiguration *config, CMeshObj **pmesh, int num_mesh, CBoatWave *pW);
- ~CSea();
- // 初始化创建缓冲区(顶点、索引缓冲区)
- bool InitializeBuffers();
- bool InitializeTextures();
- // 加载效果
- void LoadEffect();
- // **每桢更新数据流程**
- bool Update();
- void SetupMatrices(const CCamera *camera_view);
- bool CalculateExtension();
- // **渲染海面流程**
- bool Render();
- // 海面反射和折射渲染部分
- void RenderRefraction();
- void RenderReflection();
- void SetSunLight(int mode);
- void SetClipPlane(CMeshObj *pM);
- void Draw_meshobj(CMeshObj *pM);
- void GPUDrawMeshObj(CMeshObj *pM);
- // **获取海面处某位置高低**
- float get_height_at(float,float);
- };
- #endif