clray

annotate src/scene.h @ 62:d9520da6b801

minor readme fix
author John Tsiombikas <nuclear@member.fsf.org>
date Mon, 28 Dec 2015 10:31:58 +0200
parents 6a30f27fa1e6
children
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@24 6 #include <list>
nuclear@45 7 #include "common.h"
nuclear@6 8
nuclear@6 9 struct Vertex {
nuclear@9 10 float pos[4];
nuclear@9 11 float normal[4];
nuclear@12 12 float tex[4];
nuclear@12 13 float padding[4];
nuclear@6 14 };
nuclear@6 15
nuclear@6 16 struct Face {
nuclear@6 17 Vertex v[3];
nuclear@9 18 float normal[4];
nuclear@6 19 int matid;
nuclear@12 20 int padding[3];
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@54 35 struct Light {
nuclear@54 36 float pos[4], color[4];
nuclear@54 37 };
nuclear@54 38
nuclear@25 39 class AABBox {
nuclear@25 40 public:
nuclear@25 41 float min[4], max[4];
nuclear@25 42
nuclear@25 43 float calc_surface_area() const;
nuclear@25 44 };
nuclear@25 45
nuclear@22 46 struct KDNode {
nuclear@37 47 int axis;
nuclear@25 48 AABBox aabb;
nuclear@26 49 float cost;
nuclear@24 50
nuclear@24 51 KDNode *left, *right;
nuclear@32 52 std::vector<int> face_idx;
nuclear@26 53
nuclear@26 54 KDNode();
nuclear@23 55 };
nuclear@22 56
nuclear@24 57 struct KDNodeGPU {
nuclear@28 58 AABBox aabb;
nuclear@43 59 int face_idx[MAX_NODE_FACES];
nuclear@28 60 int num_faces;
nuclear@35 61 int left, right;
nuclear@35 62 int padding;
nuclear@24 63 };
nuclear@24 64
nuclear@24 65
nuclear@6 66 class Scene {
nuclear@24 67 private:
nuclear@24 68 mutable Face *facebuf;
nuclear@24 69 mutable int num_faces;
nuclear@24 70
nuclear@28 71 mutable KDNodeGPU *kdbuf;
nuclear@28 72
nuclear@6 73 public:
nuclear@6 74 std::vector<Mesh*> meshes;
nuclear@54 75 std::vector<Light> lights;
nuclear@6 76 std::vector<Material> matlib;
nuclear@24 77 KDNode *kdtree;
nuclear@24 78
nuclear@24 79 Scene();
nuclear@24 80 ~Scene();
nuclear@6 81
nuclear@13 82 bool add_mesh(Mesh *m);
nuclear@54 83 bool add_light(const Light &lt);
nuclear@54 84
John@14 85 int get_num_meshes() const;
nuclear@54 86 int get_num_lights() const;
nuclear@35 87 int get_num_faces() const;
John@14 88 int get_num_materials() const;
nuclear@35 89 int get_num_kdnodes() const;
nuclear@13 90
nuclear@54 91 Mesh **get_meshes();
nuclear@54 92 const Mesh * const *get_meshes() const;
nuclear@54 93
nuclear@54 94 Light *get_lights();
nuclear@54 95 const Light *get_lights() const;
nuclear@54 96
John@14 97 Material *get_materials();
John@14 98 const Material *get_materials() const;
nuclear@13 99
nuclear@6 100 bool load(const char *fname);
nuclear@6 101 bool load(FILE *fp);
nuclear@22 102
nuclear@24 103 const Face *get_face_buffer() const;
nuclear@28 104 const KDNodeGPU *get_kdtree_buffer() const;
nuclear@27 105
nuclear@27 106 void draw_kdtree() const;
nuclear@27 107 bool build_kdtree();
nuclear@6 108 };
nuclear@6 109
nuclear@26 110 enum {
nuclear@26 111 ACCEL_PARAM_MAX_TREE_DEPTH,
nuclear@26 112 ACCEL_PARAM_MAX_NODE_ITEMS,
nuclear@26 113 ACCEL_PARAM_COST_TRAVERSE,
nuclear@26 114 ACCEL_PARAM_COST_INTERSECT,
nuclear@26 115
nuclear@26 116 NUM_ACCEL_PARAMS
nuclear@26 117 };
nuclear@26 118
nuclear@26 119 void set_accel_param(int p, int v);
nuclear@26 120
nuclear@28 121 int kdtree_depth(const KDNode *tree);
nuclear@28 122 int kdtree_nodes(const KDNode *tree);
nuclear@28 123
nuclear@32 124 bool kdtree_dump(const KDNode *tree, const char *fname);
nuclear@32 125 KDNode *kdtree_restore(const char *fname);
nuclear@32 126
nuclear@6 127 #endif /* MESH_H_ */