MeshObj.h
上传用户:henghua
上传日期:2007-11-14
资源大小:7655k
文件大小:3k
- #ifndef _MESHOBJ_H_
- #define _MESHOBJ_H_
- #include <d3dx9.h>
- #include <string.h>
- #include "ParticleSystem.h"
- enum objMovementMode
- {
- moving_on_sea = 0,
- moving_up_freely,
- moving_down_freely,
- fixed_on_sea,
- fixed_up_sea,
- fixed_down_sea,
- is_land
- };
- enum objDrawMtrlsTexs
- {
- not_have_mtrls =0,
- not_have_texs,
- have_mtrls,
- have_texs,
- load_texs
- };
- struct cmeshobjconfig
- {
- int draw_mtrls_state; // 材质来源
- int draw_texs_state; // 纹理来源
- int movement_mode; // 运动方式
- D3DXVECTOR3 translate; // 平移量
- D3DXVECTOR3 scale; // 放缩量
- D3DXVECTOR3 rotate; // 旋转量
- };
- class CMeshObj
- {
- // ****数据成员****
- public:
- // **D3D设备指针**
- LPDIRECT3DDEVICE9 device;
- // **网格模型相关参数**
- char X_filename[50]; // 网格模型的文件名
- LPD3DXMESH pMesh;
- D3DMATERIAL9 *pMeshMtrls; // 从模型文件.x中获得的材质
- LPDIRECT3DTEXTURE9 *pMeshTexs; // 从模型文件.x中获得的纹理,,也可后来从图文件中加载覆盖原来纹理
- LPD3DXBUFFER pAdjacency, pMaterials, pEffectInstances; // 从模型文件.x中获得的关于相邻、材质、效果的缓冲区
- LPD3DXEFFECT pLoadEffect; // 后来从文件.fx中加载的效果
- DWORD num_mtrls; // 模型文件中材质(即:子模型)的数目
- int draw_mtrls_state;
- int draw_texs_state;
- int load_texs_mode;
- int gpu_tex;
- // **模型的物理参数**
- // 模型的空间参数(位置、姿态)
- D3DXVECTOR3 position, vUp, vRight;
- D3DXMATRIX matPitch, matYaw, matRoll;
- D3DXVECTOR3 translate0, scale0, rotate0;
- D3DXMATRIX world, matWorld0, matWorld, boatRolling; // matPitch, matYaw, matRoll--〉matWorld
- D3DXMATRIX translate, rotate, scale;
- // 四元数控制参数
- D3DXVECTOR3 vLook;
- float fRoll; // 横滚角--〉matRoll
- float fPitch; // 俯仰角--〉matPitch
- float fYaw; // 偏航角--〉matYaw
- long time, lastTime;
- // 模型的运动参数
- int movement_mode;
- float velosity;
- // **模型与用户输入(键盘)的交互参数**
- bool keys[256];
- // **模型在海面的折射与反射参数**
- int refle_mode;
- int refra_mode;
- // ***船模型与粒子系统的关系参量***
- CParticleSystem *p_parSys[3];
- int attached_par;
- // ***海洋高度***
- float seaHeight;
- // ****函数成员****
- public:
- CMeshObj(const LPDIRECT3DDEVICE9 dev, char *xfilename, cmeshobjconfig *config);
- ~CMeshObj();
- // **初始化模块**
- HRESULT Init();
- HRESULT LoadTexture(char *filename, int i);
- HRESULT LoadEffect(char *filenamei);
- // **渲染模块**
- void UpdateHeight(float height);
- void SetWorldMatrix();
- void Render();
- void SetSunLight();
- // **更新信息模块**
- void Changeconfig(cmeshobjconfig *config);
- // **与用户交互模块**
- void GetKey(int i); // 消息处理
- void LostKey(int i); // 消息处理
- // ***设置船模型与粒子系统的关系参量模块***
- void InitParSys(cparticleconfig *config);
- void ControlBoat(float interval);
- // **辅助函数列表**
- private:
- void RemovePathFromFileName(LPSTR fullPath, LPSTR fileName);
- };
- #endif