antigravitaattori/src/m3dmesh.h
2016-07-12 08:47:20 +02:00

72 lines
1.2 KiB
C++

#ifndef _M3DMESH_H_
#define _M3DMESH_H_
struct Vertex
{
float co[3];
float no[3];
};
struct Face
{
int verts[3];
float no[3];
float uv[3][2];
int texture;
int material;
int smooth;
};
struct FaceSort
{
int operator()(const struct Face &face1, const struct Face &face2)
{
if(face1.texture < face2.texture) return 1;
else if(face1.texture > face2.texture) return 0;
else return face1.material < face2.material;
}
};
class m3dMaterial;
/// A triangle mesh
/**
The m3dMesh is a simple class for loading and drawing triangle mesh
models.
*/
class m3dMesh
{
public:
m3dMesh();
~m3dMesh();
int loadFromXML(const TiXmlElement *root);
int loadFromXML(const char *filename);
const m3dTexture &getTexture(int n) const;
void setTexture(int n, const m3dTexture &tex);
void draw();
private:
struct Vertex *verts;
struct Face *faces;
int numVerts;
int numFaces;
m3dTexture *textures;
int numTextures;
m3dMaterial *materials;
int numMaterials;
int parseVertex(const TiXmlElement *root, struct Vertex *vert);
int parseFace(const TiXmlElement *root, struct Face *face);
void writeVertex(TiXmlElement *root, const struct Vertex *vert);
void writeFace(TiXmlElement *root, const struct Face *face);
};
#endif