diff options
-rw-r--r-- | BSPTree.cpp | 17 |
1 files 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<Triangle> &triangles) : frontTree(0), backTree( std::list<Triangle> front, back; for(std::list<Triangle>::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<Triangle> &triangles) { } const Triangle* BSPTree::findNearestTriangle(const std::list<Triangle> &triangles, const vmml::vec3f &v) { - if(triangles.empty()) - return 0; + const Triangle *current = 0; + float distanceSq; - std::list<Triangle>::const_iterator t = triangles.begin(); - - const Triangle *current = &*t; - float distanceSq = current->getCenter().squared_distance(v); + for(std::list<Triangle>::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; } |