From 1a321ed999334f0d9f5255249ebeeed0278871d6 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Thu, 10 Dec 2009 09:08:16 +0100 Subject: Benutzte BSPTrees zum rendern --- DisplayClass.cpp | 79 +++++++++++++++++--------------------------------------- 1 file changed, 23 insertions(+), 56 deletions(-) (limited to 'DisplayClass.cpp') diff --git a/DisplayClass.cpp b/DisplayClass.cpp index b82b18e..206556e 100644 --- a/DisplayClass.cpp +++ b/DisplayClass.cpp @@ -4,35 +4,23 @@ #include "BSPTree.h" -void DisplayClass::RenderVisitor::operator() (const Triangle &t) const { - t.render(); -} +DisplayClass::OpaqueRenderer DisplayClass::opaqueRenderer; +DisplayClass::TransparentRenderer DisplayClass::transparentRenderer; DisplayClass::DisplayClass() { - static const float pos[5] = {-3.0, -2.0, 0.0, 2.0, 3.0}; - - 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]); - } - } - } + cubeing[0] = Trapezocube(11.0, 10.0, 10.0, 0.5, 0.0, 0.0, 1.75, 0); + cubeing[1] = Trapezocube(10.0, 9.0, 9.0, 0.5, 0.0, 0.0, 2.25, 90); + cubeing[2] = Trapezocube(9.0, 8.0, 8.0, 0.5, 0.0, 0.0, 2.75, 180); + cubeing[3] = Trapezocube(8.0, 7.0, 7.0, 0.5, 0.0, 0.0, 3.25, 270); + cubeing[4] = Trapezocube(7.0, 6.0, 6.0, 0.5, 0.0, 0.0, 3.75, 0); + cubeing[5] = Trapezocube(6.0, 5.0, 5.0, 0.5, 0.0, 0.0, 4.25, 90); + cubeing[6] = Trapezocube(5.0, 4.0, 4.0, 0.5, 0.0, 0.0, 4.75, 180); + cubeing[7] = Trapezocube(4.0, 3.0, 3.0, 0.5, 0.0, 0.0, 5.25, 270); } void DisplayClass::renderScene(unsigned long delta) { - //Cubehole cubeing(3.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.5); - Trapezocube cubeing1(11.0, 10.0, 10.0, 0.5, 0.0, 0.0, 1.75, 0); - Trapezocube cubeing2(10.0, 9.0, 9.0, 0.5, 0.0, 0.0, 2.25, 90); - Trapezocube cubeing3(9.0, 8.0, 8.0, 0.5, 0.0, 0.0, 2.75, 180); - Trapezocube cubeing4(8.0, 7.0, 7.0, 0.5, 0.0, 0.0, 3.25, 270); - Trapezocube cubeing5(7.0, 6.0, 6.0, 0.5, 0.0, 0.0, 3.75, 0); - Trapezocube cubeing6(6.0, 5.0, 5.0, 0.5, 0.0, 0.0, 4.25, 90); - Trapezocube cubeing7(5.0, 4.0, 4.0, 0.5, 0.0, 0.0, 4.75, 180); - Trapezocube cubeing8(4.0, 3.0, 3.0, 0.5, 0.0, 0.0, 5.25, 270); static float angle = 0.0; angle += delta*0.025; if(angle >= 360) @@ -40,9 +28,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 triangles; glLoadIdentity(); // Clean up matrix @@ -52,42 +37,24 @@ 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 ct = cubes[i][j][k].getTriangles(m); - triangles.splice(triangles.end(), ct); - } - } - }*/ - std::list ct1 = cubeing1.getTriangles(); - triangles.splice(triangles.end(), ct1); - std::list ct2 = cubeing2.getTriangles(); - triangles.splice(triangles.end(), ct2); - std::list ct3 = cubeing3.getTriangles(); - triangles.splice(triangles.end(), ct3); - std::list ct4 = cubeing4.getTriangles(); - triangles.splice(triangles.end(), ct4); - std::list ct5 = cubeing5.getTriangles(); - triangles.splice(triangles.end(), ct5); - std::list ct6 = cubeing6.getTriangles(); - triangles.splice(triangles.end(), ct6); - std::list ct7 = cubeing7.getTriangles(); - triangles.splice(triangles.end(), ct7); - std::list ct8 = cubeing8.getTriangles(); - triangles.splice(triangles.end(), ct8); - - //glLoadIdentity(); + for(int i = 0; i < 8; ++i) { + std::list t = cubeing[i].getTriangles(); + triangles.splice(triangles.end(), t); + } BSPTree tree(triangles); + vmml::mat4f transform, inverseTransform; + glGetFloatv(GL_MODELVIEW_MATRIX, transform.array); + + transform.inverse(inverseTransform); + inverseTransform.set_translation(vmml::vec3f()); + vmml::vec3f viewVector = inverseTransform*vmml::vec3f(0, 0, -1); + glBegin(GL_TRIANGLES); - /*for(std::list::reverse_iterator t = triangles.rbegin(); t != triangles.rend(); ++t) { - t->render(); - }*/ - tree.visit(RenderVisitor(), vmml::vec3f(0, 0, -1)); + tree.visit(opaqueRenderer, -viewVector); + tree.visit(transparentRenderer, viewVector); glEnd(); glFlush(); -- cgit v1.2.3