diff options
Diffstat (limited to 'DisplayClass.cpp')
-rw-r--r-- | DisplayClass.cpp | 51 |
1 files changed, 17 insertions, 34 deletions
diff --git a/DisplayClass.cpp b/DisplayClass.cpp index b0a4a8d..6d9fdee 100644 --- a/DisplayClass.cpp +++ b/DisplayClass.cpp @@ -1,27 +1,20 @@ #include "DisplayClass.h" -#include "Matrix.h" #include "gl.h" -//#include <algorithm> -#include "Trapezocube.h" #include "BSPTree.h" -DisplayClass::DisplayClass() { - static const float pos[5] = {-3.0, -2.0, 0.0, 2.0, 3.0}; +DisplayClass::Renderer DisplayClass::renderer; - for(int i = 0; i < 5; ++i) { - for(int j = 0; j < 5; ++j) { - for(int k = 0; k < 5; ++k) { - cubes[i][j][k].setSize(0.5, 0.5, 0.5); - cubes[i][j][k].setPos(pos[k], pos[j], pos[i]); - } - } - } +DisplayClass::DisplayClass() { + cubehole = Cubehole(3.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.5, + vmml::vec4f(1.0, 0.0, 0.0), + vmml::vec4f(0.0, 1.0, 0.0), + vmml::vec4f(0.0, 0.0, 1.0), + vmml::vec4f(1.0, 0.85, 0.06)); } void DisplayClass::renderScene(unsigned long delta) { - Cubehole cubeing(3.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.5, Color(1.0, 0.0, 0.0), Color(0.0, 1.0, 0.0), Color(0.0, 0.0, 1.0), Color(1.0, 0.85, 0.06)); static float angle = 0.0; angle += delta*0.025; if(angle >= 360) @@ -29,11 +22,6 @@ void DisplayClass::renderScene(unsigned long delta) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - //Matrix p(GL_PROJECTION_MATRIX); - //Matrix m; - - std::list<Triangle> triangles; - glLoadIdentity(); // Clean up matrix glTranslatef(0.0, 0.0, -10.0); // Then set up transformation glRotatef(angle, 0.0, 1.0, 0.0); @@ -41,25 +29,20 @@ void DisplayClass::renderScene(unsigned long delta) glRotatef(angle*3, 0.0, 0.0, 1.0); glRotatef(-angle*5, 1.0, 1.0, 1.0); - //m.store(); // Save current transformation - /*for(int i = 0; i < 5; ++i) { - for(int j = 0; j < 5; ++j) { - for(int k = 0; k < 5; ++k) { - std::list<Triangle> ct = cubes[i][j][k].getTriangles(m); - triangles.splice(triangles.end(), ct); - } - } - }*/ - //glLoadIdentity(); + std::list<Triangle> triangles = cubehole.getTriangles(); + + BSPTree tree(triangles); + + vmml::mat4f transform, inverseTransform; + glGetFloatv(GL_MODELVIEW_MATRIX, transform.array); + + transform.inverse(inverseTransform); - std::list<Triangle> ct = cubeing.getTriangles(); - triangles.splice(triangles.end(), ct); + vmml::vec3f viewPoint = inverseTransform*vmml::vec3f::ZERO; glBegin(GL_TRIANGLES); - for(std::list<Triangle>::reverse_iterator t = triangles.rbegin(); t != triangles.rend(); ++t) { - t->render(); - } + tree.visit(renderer, viewPoint); glEnd(); glFlush(); |