chose.hh (2559B)
1 #ifndef _RULES_CHOSE_HH_ 2 #define _RULES_CHOSE_HH_ 3 4 #include "all_includes.hh" 5 6 // RectangleRoutes est un quadrilatère de routes avec des angles aux coins égaux à 90°. 7 class Chose { 8 public : 9 static unsigned int initialSeed; 10 unsigned int seed; 11 std::vector<Chose*> children; 12 std::vector<GPUTriangle*> triangles; 13 LodNode lod; 14 15 public : 16 void display(); 17 void displayNormals(); 18 void drawAABB(); // DEBUG 19 virtual void split() {}; 20 virtual void merge(); 21 virtual void triangulation() { clearTriangles(); }; 22 virtual void updateAABB(); 23 24 protected : 25 void addBBPoint(const Vertex v); 26 void addBBPoints(const Triangle t); 27 void addBBPoints(const Triangle t, float height); 28 void addBBPoints(const Quad q); 29 void addBBPoints(const Quad q, float height); 30 virtual void getBoundingBoxPoints() = 0; 31 virtual float LODFactor(); 32 Chose(); 33 virtual ~Chose(); 34 inline void addEntropy(unsigned int x1) { 35 seed = hash2(seed, x1); 36 } 37 inline void addEntropyf(float f) { 38 addEntropy(float2uint(f)); 39 } 40 inline void addEntropy(unsigned int x1, unsigned int x2) { 41 addEntropy(x1); addEntropy(x2); 42 } 43 inline void addEntropy(unsigned int x1, unsigned int x2, unsigned int x3) { 44 addEntropy(x1, x2); addEntropy(x3); 45 } 46 inline void addEntropy(unsigned int x1, unsigned int x2, unsigned int x3, unsigned int x4) { 47 addEntropy(x1, x2); addEntropy(x3, x4); 48 } 49 inline void addEntropy(Vertex v1) { 50 addEntropy(float2uint(v1.x), float2uint(v1.y)); 51 } 52 inline void addEntropy(Vertex v1, Vertex v2) { 53 addEntropy(v1); addEntropy(v2); 54 } 55 inline void addEntropy(Vertex v1, Vertex v2, Vertex v3) { 56 addEntropy(v1, v2); addEntropy(v3); 57 } 58 inline void addEntropy(Vertex v1, Vertex v2, Vertex v3, Vertex v4) { 59 addEntropy(v1, v2); addEntropy(v3, v4); 60 } 61 inline void addEntropy(Quad q) { 62 addEntropy(q[NE], q[SE], q[SW], q[NW]); 63 } 64 inline void addEntropy(Triangle t) { 65 addEntropy(t[LEFT], t[TOP], t[RIGHT]); 66 } 67 void addChild(Chose* c); 68 69 void addGPUTriangle(Vertex left, Vertex top, Vertex right, unsigned int rgb); 70 void addGPUTriangle(Triangle t, unsigned int rgb); 71 void addGPUQuad(Vertex ne, Vertex se, Vertex sw, Vertex nw, unsigned int rgb); 72 void addGPUQuad(Quad q, unsigned int rgb); 73 void addGPUFourQuads(Quad q, Quad qh, unsigned int rgb); 74 void addGPUThreeQuads(Triangle t, Triangle th, unsigned int rgb); 75 void addGPUOcto(Vertex ne, Vertex se, Vertex sw, Vertex nw, 76 Vertex neh, Vertex seh, Vertex swh, Vertex nwh, 77 unsigned int rgb); 78 void addGPUOcto(Quad q, Quad qh, unsigned int rgb); 79 private: 80 void clearChildren(); 81 void clearTriangles(); 82 }; 83 84 #endif