2.9 Loadable Meshes using cMesh(网格)
:
class cMesh { private: cGraphics *m_Graphics; // cGraphics 父对象 long m_NumMeshes; // 网格数量 sMesh *m_Meshes; //网格列表 long m_NumFrames; // 框架(frame)数量 sFrame *m_Frames; // 框架(frame)列表 D3DXVECTOR3 m_Min, m_Max; // 盒子(Bounding box)坐标 float m_Radius; // 球形盒子半径 // 解析.x文件模板 void ParseXFileData(IDirectXFileData *pData, / sFrame *ParentFrame, char *TexturePath); // 使骨骼、框架相称变换 void MapFramesToBones(sFrame *Frame); public: cMesh(); // 构造函数 ~cMesh(); // 析构函数 BOOL IsLoaded(); // 如果网格被装载返回TRUE long GetNumFrames(); // 返回列表(list)中框架(frame)数量 sFrame *GetParentFrame(); // 返回框架列表栈顶框架 sFrame *GetFrame(char *Name); // 在列表中查询框架 long GetNumMeshes(); //返回列表中网格数量 sMesh *GetParentMesh(); // 返回网格列表栈顶网格 sMesh *GetMesh(char *Name); // 在网格列表中查找网格 // 获得盒子坐标和盒子半径 BOOL GetBounds(float *MinX, float *MinY, float *MinZ, / float *MaxX, float *MaxY, float *MaxZ, / float *Radius); // 装载和释放.x文件 // (可以指定纹理路径). BOOL Load(cGraphics *Graphics, char *Filename, / char *TexturePath = “.//”); BOOL Free(); }; |
尽管这个类看起来很小,我也不想跟你介绍sMesh和sFrame结构体,这两个结构体组成了一个网格对象和框架链。这是cMesh内部使用的东西,不做介绍了,你可以在他的文件里看看得了。
例子:
// 如果 g_Graphics是一个已经被初始化过的cGraphics 对象 cMesh Mesh; Mesh.Load(&g_Graphics, “Mesh.x”); Mesh.Free(); //做完之后要释放 |