-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMD3Model.h
More file actions
138 lines (115 loc) · 2.57 KB
/
MD3Model.h
File metadata and controls
138 lines (115 loc) · 2.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#pragma once
#include "glee.h"
#include <vector>
#include <map>
#include "objects.h"
#include <string>
namespace MD3 {
struct MD3Header {
char ident[4];
int version;
char name[64];
int flags;
int numFrames;
int numTags;
int numSurfaces;
int numSkins;
int framesOffset;
int tagsOffset;
int surfacesOffset;
int eofOffset;
};
struct MD3Shader {
char name[64];
GLuint shaderIndex;
};
struct Triangle {
int indexes[3];
};
struct TexCoord {
GLfloat s;
GLfloat t;
};
struct MD3Vertex {
short coord[3];
char normal[2];
};
struct Vector {
GLfloat v[3];
};
struct Frame {
Vector minBounds;
Vector maxBounds;
Vector localOrigin;
GLfloat radius;
char name[16];
};
struct Tag {
char name[64];
Vector origin;
Vector axis[3];
};
struct SurfaceHeader {
char ident[4];
char name[64];
int flags;
int numFrames;
int numShaders;
int numVerts;
int numTris;
int trisOffset;
int shadersOffset;
int texCoordsOffset;
int vertsOffset;
int endOffset;
};
struct Surface {
SurfaceHeader header;
std::vector<MD3Shader> shaders;
std::vector<Triangle> triangles;
std::vector<TexCoord> texCoords;
std::vector<MD3Vertex> md3vertices;
std::vector<Vector> vertices;
std::vector<Vector> normals;
};
} // end namespace MD3
class MD3Model
{
public:
MD3Model();
// Load M3 model into memory
bool load(std::string modelFilename);
void parseSkinFile(std::string modelFilename);
void addLink(std::string tagName, MD3Model &model);
void setMaterialProperties(MaterialProps props);
void setAnimationParams(GLuint startFrame, GLuint endFrame, GLuint fps);
bool hasAnimationFinished();
Box* getCollider();
void drawModel(ShaderProgram *shaderProgram);
void onPrepare(float dt);
void onRender(ShaderProgram *shaderProgram);
void renderNormals(ShaderProgram *shaderProgram);
~MD3Model(void);
private:
std::vector<const char*> m_components;
//MD3::AnimationPhase m_animPhase;
GLuint m_startFrame;
GLuint m_endFrame;
GLuint m_currentFrame;
GLuint m_nextFrame;
GLuint m_fps;
float m_timeCount;
float m_lerpValue;
bool m_animationFinished;
Box* m_collider;
MD3::MD3Header m_header;
std::vector<MD3::Frame> m_frames;
std::vector<MD3::Tag> m_tags;
std::vector<MD3::Surface> m_surfaces;
std::map<std::string, MD3Model*> m_links;
std::vector<std::vector<GLuint>> m_vertexBuffers;
std::vector<GLuint> m_texCoordBuffers;
std::vector<std::vector<GLuint>> m_normalBuffers;
std::map<std::string, GLuint> m_textures;
MaterialProps m_materialProps;
};