From 0d976c387f1cb6b3f6c2cff3a577236ec101d4e0 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Thu, 10 Dec 2009 23:33:01 +0100 Subject: BSPTree kann jetzt mit degenerierten Dreiecken umgehen --- BSPTree.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/BSPTree.cpp b/BSPTree.cpp index 00e916b..3254446 100644 --- a/BSPTree.cpp +++ b/BSPTree.cpp @@ -64,6 +64,9 @@ BSPTree::BSPTree(const std::list &triangles) : frontTree(0), backTree( std::list front, back; for(std::list::const_iterator t = triangles.begin(); t != triangles.end(); ++t) { + if(t->getNormal().squared_length() == 0) + continue; + if(plane.contains(*t)) { this->triangles.push_back(*t); continue; @@ -102,18 +105,16 @@ vmml::vec3f BSPTree::findCenter(const std::list &triangles) { } const Triangle* BSPTree::findNearestTriangle(const std::list &triangles, const vmml::vec3f &v) { - if(triangles.empty()) - return 0; + const Triangle *current = 0; + float distanceSq; - std::list::const_iterator t = triangles.begin(); - - const Triangle *current = &*t; - float distanceSq = current->getCenter().squared_distance(v); + for(std::list::const_iterator t = triangles.begin(); t != triangles.end(); ++t) { + if(t->getNormal().squared_length() == 0) + continue; - for(++t; t != triangles.end(); ++t) { float d = t->getCenter().squared_distance(v); - if(d < distanceSq) { + if(!current || d < distanceSq) { current = &*t; distanceSq = d; } -- cgit v1.2.3