From f31beab9a7160e913da7ff30d946eaf2a721fdc8 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Thu, 10 Dec 2009 11:29:16 +0100 Subject: BSPTree-Visiting-Reihenfolge korrigiert --- BSPTree.h | 24 ++++++++++++------------ Cuboid.cpp | 32 ++++++++++++++------------------ DisplayClass.cpp | 26 ++++++++++++++------------ DisplayClass.h | 6 ++++-- Triangle.h | 1 + main.cpp | 2 +- 6 files changed, 46 insertions(+), 45 deletions(-) diff --git a/BSPTree.h b/BSPTree.h index a03327b..0b13b6b 100644 --- a/BSPTree.h +++ b/BSPTree.h @@ -78,54 +78,54 @@ class BSPTree { } template - void visit(const T& visitor, const vmml::vec3f &v) { - if(plane.getNormal().dot(v) > 0) { + void visit(const T& visitor, const vmml::vec3f &p) { + if(plane.isBehind(p)) { if(frontTree) - frontTree->visit(visitor, v); + frontTree->visit(visitor, p); for(std::list::iterator t = triangles.begin(); t != triangles.end(); ++t) { visitor(*t); } if(backTree) - backTree->visit(visitor, v); + backTree->visit(visitor, p); } else { if(backTree) - backTree->visit(visitor, v); + backTree->visit(visitor, p); for(std::list::iterator t = triangles.begin(); t != triangles.end(); ++t) { visitor(*t); } if(frontTree) - frontTree->visit(visitor, v); + frontTree->visit(visitor, p); } } template - void visit(T& visitor, const vmml::vec3f &v) { - if(plane.getNormal().dot(v) > 0) { + void visit(T& visitor, const vmml::vec3f &p) { + if(plane.isBehind(p)) { if(frontTree) - frontTree->visit(visitor, v); + frontTree->visit(visitor, p); for(std::list::iterator t = triangles.begin(); t != triangles.end(); ++t) { visitor(*t); } if(backTree) - backTree->visit(visitor, v); + backTree->visit(visitor, p); } else { if(backTree) - backTree->visit(visitor, v); + backTree->visit(visitor, p); for(std::list::iterator t = triangles.begin(); t != triangles.end(); ++t) { visitor(*t); } if(frontTree) - frontTree->visit(visitor, v); + frontTree->visit(visitor, p); } } diff --git a/Cuboid.cpp b/Cuboid.cpp index ed0de5d..5b1af49 100644 --- a/Cuboid.cpp +++ b/Cuboid.cpp @@ -68,19 +68,19 @@ std::list Cuboid::getTriangles(/*const Matrix &modelview*/) vmml::vec4f c(0.0, 0.0, 1.0, 0.5); triangles.push_back(Triangle(vmml::vec3f(x-width/2, y+height/2, z+depth/2), - vmml::vec3f(x+width/2, y+height/2, z+depth/2), - vmml::vec3f(x-width/2, y-height/2, z+depth/2), c)); + vmml::vec3f(x-width/2, y-height/2, z+depth/2), + vmml::vec3f(x+width/2, y+height/2, z+depth/2), c)); triangles.push_back(Triangle(vmml::vec3f(x-width/2, y-height/2, z+depth/2), - vmml::vec3f(x+width/2, y+height/2, z+depth/2), - vmml::vec3f(x+width/2, y-height/2, z+depth/2), c)); + vmml::vec3f(x+width/2, y-height/2, z+depth/2), + vmml::vec3f(x+width/2, y+height/2, z+depth/2), c)); // Back face c = vmml::vec4f(1.0, 1.0, 0.0, 0.5); triangles.push_back(Triangle(vmml::vec3f(x-width/2, y+height/2, z-depth/2), - vmml::vec3f(x-width/2, y-height/2, z-depth/2), - vmml::vec3f(x+width/2, y+height/2, z-depth/2), c)); + vmml::vec3f(x+width/2, y+height/2, z-depth/2), + vmml::vec3f(x-width/2, y-height/2, z-depth/2), c)); triangles.push_back(Triangle(vmml::vec3f(x-width/2, y-height/2, z-depth/2), vmml::vec3f(x+width/2, y+height/2, z-depth/2), @@ -90,12 +90,12 @@ std::list Cuboid::getTriangles(/*const Matrix &modelview*/) c = vmml::vec4f(0.0, 1.0, 0.0, 0.5); triangles.push_back(Triangle(vmml::vec3f(x-width/2, y+height/2, z+depth/2), - vmml::vec3f(x-width/2, y-height/2, z+depth/2), - vmml::vec3f(x-width/2, y+height/2, z-depth/2), c)); - - triangles.push_back(Triangle(vmml::vec3f(x-width/2, y-height/2, z-depth/2), vmml::vec3f(x-width/2, y+height/2, z-depth/2), vmml::vec3f(x-width/2, y-height/2, z+depth/2), c)); + + triangles.push_back(Triangle(vmml::vec3f(x-width/2, y-height/2, z-depth/2), + vmml::vec3f(x-width/2, y-height/2, z+depth/2), + vmml::vec3f(x-width/2, y+height/2, z-depth/2), c)); // Right face @@ -121,16 +121,12 @@ std::list Cuboid::getTriangles(/*const Matrix &modelview*/) // Bottom face triangles.push_back(Triangle(vmml::vec3f(x-width/2, y-height/2, z+depth/2), - vmml::vec3f(x+width/2, y-height/2, z+depth/2), - vmml::vec3f(x-width/2, y-height/2, z-depth/2), c)); + vmml::vec3f(x-width/2, y-height/2, z-depth/2), + vmml::vec3f(x+width/2, y-height/2, z+depth/2), c)); triangles.push_back(Triangle(vmml::vec3f(x+width/2, y-height/2, z+depth/2), - vmml::vec3f(x+width/2, y-height/2, z-depth/2), - vmml::vec3f(x-width/2, y-height/2, z-depth/2), c)); - - /*for(std::list::iterator t = triangles.begin(); t != triangles.end(); ++t) { - t->transform(modelview); - }*/ + vmml::vec3f(x-width/2, y-height/2, z-depth/2), + vmml::vec3f(x+width/2, y-height/2, z-depth/2), c)); return triangles; } diff --git a/DisplayClass.cpp b/DisplayClass.cpp index 69c4c17..d993e3b 100644 --- a/DisplayClass.cpp +++ b/DisplayClass.cpp @@ -8,39 +8,41 @@ DisplayClass::TransparentRenderer DisplayClass::transparentRenderer; DisplayClass::DisplayClass() { - cubeing[0] = Trapezocube(11.0, 10.0, 10.0, 0.5, 0.0, 0.0, 1.75, 0); + /*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); + cubeing[7] = Trapezocube(4.0, 3.0, 3.0, 0.5, 0.0, 0.0, 5.25, 270);*/ + + cube = Cuboid(1, 1, 1, 0, 0, 0); } void DisplayClass::renderScene(unsigned long delta) { static float angle = 0.0; - angle += delta*0.025; + angle += delta*0.015; if(angle >= 360) angle -= 360; glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - std::list triangles; - glLoadIdentity(); // Clean up matrix - glTranslatef(0.0, 0.0, -30.0); // Then set up transformation + glTranslatef(0.0, 0.0, -5.0); // Then set up transformation glRotatef(angle, 0.0, 1.0, 0.0); glRotatef(angle*2, 1.0, 0.0, 0.0); glRotatef(angle*3, 0.0, 0.0, 1.0); glRotatef(-angle*5, 1.0, 1.0, 1.0); - for(int i = 0; i < 8; ++i) { + std::list triangles = cube.getTriangles(); + + /*for(int i = 0; i < 8; ++i) { std::list t = cubeing[i].getTriangles(); triangles.splice(triangles.end(), t); - } + }*/ BSPTree tree(triangles); @@ -48,12 +50,12 @@ void DisplayClass::renderScene(unsigned long delta) glGetFloatv(GL_MODELVIEW_MATRIX, transform.array); transform.inverse(inverseTransform); - inverseTransform.set_translation(vmml::vec3f()); - vmml::vec3f viewVector = inverseTransform*vmml::vec3f(0, 0, -1); + + vmml::vec3f viewPoint = inverseTransform*vmml::vec3f(0, 0, 0); glBegin(GL_TRIANGLES); - tree.visit(opaqueRenderer, -viewVector); - tree.visit(transparentRenderer, viewVector); + tree.visit(opaqueRenderer, viewPoint); + tree.visit(transparentRenderer, viewPoint); glEnd(); glFlush(); diff --git a/DisplayClass.h b/DisplayClass.h index 0341469..d1e56ba 100644 --- a/DisplayClass.h +++ b/DisplayClass.h @@ -1,7 +1,8 @@ #ifndef _DISPLAYCLASS_H_ #define _DISPLAYCLASS_H_ -#include "Trapezocube.h" +//#include "Trapezocube.h" +#include "Cuboid.h" class DisplayClass { @@ -28,7 +29,8 @@ class DisplayClass static OpaqueRenderer opaqueRenderer; static TransparentRenderer transparentRenderer; - Trapezocube cubeing[8]; + //Trapezocube cubeing[8]; + Cuboid cube; }; #endif /*_DISPLAYCLASS_H_*/ diff --git a/Triangle.h b/Triangle.h index dc48071..febcb3d 100644 --- a/Triangle.h +++ b/Triangle.h @@ -24,6 +24,7 @@ class Triangle } void render() const { + glColor4fv(c.array); glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, c.array); glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, (c/2).array); diff --git a/main.cpp b/main.cpp index 58309f1..5fe8b84 100644 --- a/main.cpp +++ b/main.cpp @@ -18,7 +18,7 @@ void initGL(bool multisample); void resize(int width, int height); void initGL(bool multisample) { - glClearColor(1.0, 0.85, 0.06, 1.0); + glClearColor(0, 0, 0, 1.0); glClearDepth(1.0); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); -- cgit v1.2.3