http://4683663.photo.hexun.com/originalPic.aspx?photoID=58115893&pubTime=2009-1-12%2021:56&filetype=.jpg&hashid=E609F1760179C66C8E675597ED1F2EEF
啊啊啊啊……………………花了一天的时间~~~~~~
(*^__^*) 嘻嘻……
接口如下:
- #pragma once
- #include "../../zgesrc/root.h"
- class ZgeMesh
- {
- public:
- ZgeMesh()
- {
- }
- ~ZgeMesh()
- {
- delete[] m_vertex;
- delete[] m_tempVertex;
- delete[] m_texName;
- }
- void Init(Root* root){m_root = root;m_vertex = NULL;m_texName = NULL;m_tempVertex = NULL;}
- virtual void LoadMesh(const char* FileName) = 0;
- void BindTexture(const char* TexName);
- void RenderMesh();
- void Update(float dt);//考虑动画
- void SetFPS(int fps);
- protected:
- Root* m_root;
- vertex* m_vertex;
- vertex* m_tempVertex;
- char* m_texName;
- short int m_startFrame;//帧数
- short int m_endFrame;
- bool m_bAnimated;//是否动画
- int m_fps;//动画帧数
- int m_triple;//三角形数
- private:
- };
- #pragma once
- #include "ZgeMesh.h"
- //MD2共有16个关键帧:
- //
- //start:0 end:39 name:stand
- //start:40 end:45 name:run
- //start:46 end:53 name:attack
- //start:54 end:65 name:pain
- //start:66 end:71 name:jump
- //start:72 end:83 name:flip
- //start:84 end:94 name:salute
- //start:95 end:111 name:taunt
- //start:112 end:122 name:wave
- //start:123 end:134 name:point
- //start:135 end:153 name:crstnd
- //start:154 end:159 name:crwalk
- //start:160 end:168 name:crattack
- //start:169 end:172 name:crpain
- //start:173 end:177 name:crdeath
- //start:178 end:197 name:death
- class ZgeMd2Mesh : public ZgeMesh
- {
- public:
- enum Anim{
- MD2_ANIM_STAND = 0,
- MD2_ANIM_RUN,
- MD2_ANIM_ATTACK,
- MD2_ANIM_PAIN,
- MD2_ANIM_JUMP,
- MD2_ANIM_FLIP,
- MD2_ANIM_SALUTE,
- MD2_ANIM_TAUNT,
- MD2_ANIM_WAVE,
- MD2_ANIM_POINT,
- MD2_ANIM_CRSTND,
- MD2_ANIM_CRWALK,
- MD2_ANIM_CRATTACK,
- MD2_ANIM_CRPAIN,
- MD2_ANIM_CRDEATH,
- MD2_ANIM_DEATH
- };
- // md2 header
- typedef struct
- {
- int ident; // 文件标识. 必须是"IPD2"
- int version; // md2 版本. 等于 8
- int skinwidth; // 纹理宽度
- int skinheight; //纹理高度
- int framesize; // 每一帧占的字节数
- int num_skins; // 纹理的数目
- int num_xyz; // 三维空间中点数
- int num_st; // 纹理的坐标数
- int num_tris; //三角形的数目
- int num_glcmds; // OPENGL命令数目
- int num_frames; // 文件包含的帧数
- int ofs_skins; // 纹理名称的偏移量(每个64字节)
- int ofs_st; // 存储纹理坐标偏移量
- int ofs_tris; // 存储三角形地址偏移量
- int ofs_frames; //存储帧的地址偏移量
- int ofs_glcmds; // 存储OPENGL命令的地址偏移量
- int ofs_end; // 文件结尾的偏移量
- } md2_t;
- md2_t md2_header;
- /* Vector */
- typedef float vec3_t[3];
- /* Texture name */
- struct md2_skin_t
- {
- char name[64]; /* texture file name */
- };
- md2_skin_t* md2_skin;
- /* Texture coords */
- struct md2_texCoord_t
- {
- short s;
- short t;
- };
- md2_texCoord_t* md2_texCoord;
- /* Triangle info */
- struct md2_triangle_t
- {
- unsigned short vertex[3]; /* vertex indices of the triangle */
- unsigned short st[3]; /* tex. coord. indices */
- };
- md2_triangle_t* md2_triangle;
- /* Compressed vertex */
- struct md2_vertex_t
- {
- unsigned char v[3]; /* position */
- unsigned char normalIndex; /* normal vector index */
- };
- md2_vertex_t* md2_vertex;
- /* Model frame */
- struct md2_frame_t
- {
- vec3_t scale; /* scale factor */
- vec3_t translate; /* translation vector */
- char name[16]; /* frame name */
- struct md2_vertex_t *verts; /* list of frame's vertices */
- };
- md2_frame_t* md2_frame;
- int * md2_glcmd;
- void LoadMesh(const char* FileName);
- void SetAnim(Anim anim);
- protected:
- private:
- };
接下来该读取什么3d模型捏?~~~~