clray

annotate src/scene.h @ 23:51f115e337c2

separated obj loading and vector class
author John Tsiombikas <nuclear@member.fsf.org>
date Fri, 13 Aug 2010 18:20:45 +0100
parents 6c44e4b1726d
children 13091c00d7ca
rev   line source
nuclear@6 1 #ifndef MESH_H_
nuclear@6 2 #define MESH_H_
nuclear@6 3
nuclear@23 4 #include <stdio.h>
nuclear@6 5 #include <vector>
nuclear@6 6
nuclear@6 7 struct Vertex {
nuclear@9 8 float pos[4];
nuclear@9 9 float normal[4];
nuclear@12 10 float tex[4];
nuclear@12 11 float padding[4];
nuclear@6 12 };
nuclear@6 13
nuclear@6 14 struct Face {
nuclear@6 15 Vertex v[3];
nuclear@9 16 float normal[4];
nuclear@6 17 int matid;
nuclear@12 18 int padding[3];
John@15 19
John@15 20 bool operator ==(const Face &f) const;
nuclear@6 21 };
nuclear@6 22
nuclear@6 23 struct Material {
nuclear@9 24 float kd[4], ks[4];
nuclear@6 25 float kr, kt;
nuclear@6 26 float spow;
nuclear@12 27 float padding;
nuclear@6 28 };
nuclear@6 29
nuclear@6 30 struct Mesh {
nuclear@6 31 std::vector<Face> faces;
nuclear@6 32 int matid;
nuclear@6 33 };
nuclear@6 34
nuclear@23 35 enum {
nuclear@22 36 KDAXIS_X,
nuclear@22 37 KDAXIS_Y,
nuclear@22 38 KDAXIS_Z
nuclear@22 39 };
nuclear@22 40
nuclear@22 41 #define KDCLEAR(node) ((node)->axis = -1)
nuclear@22 42 #define KDUSED(node) ((node)->axis >= 0)
nuclear@22 43 #define KDPARENT(x) ((x) >> 1)
nuclear@22 44 #define KDLEFT(x) ((x) << 1)
nuclear@22 45 #define KDRIGHT(x) (((x) << 1) + 1)
nuclear@22 46
nuclear@22 47 struct KDNode {
nuclear@22 48 int axis;
nuclear@22 49 float pt;
nuclear@23 50 };
nuclear@22 51
nuclear@6 52 class Scene {
nuclear@6 53 public:
nuclear@6 54 std::vector<Mesh*> meshes;
nuclear@6 55 std::vector<Material> matlib;
nuclear@23 56 std::vector<KDNode> kdtree;
nuclear@6 57
nuclear@13 58 bool add_mesh(Mesh *m);
John@14 59 int get_num_meshes() const;
John@14 60 int get_num_materials() const;
John@14 61 int get_num_faces() const;
nuclear@13 62
John@14 63 Material *get_materials();
John@14 64 const Material *get_materials() const;
nuclear@13 65
nuclear@6 66 bool load(const char *fname);
nuclear@6 67 bool load(FILE *fp);
nuclear@22 68
nuclear@23 69 void build_kdtree();
nuclear@6 70 };
nuclear@6 71
nuclear@6 72 #endif /* MESH_H_ */