diff options
author | Matthias Schiffer <matthias@gamezock.de> | 2009-12-10 21:24:40 +0100 |
---|---|---|
committer | Matthias Schiffer <matthias@gamezock.de> | 2009-12-10 21:24:40 +0100 |
commit | e744ab213aeaccfe1aea6050907019aad9cf1911 (patch) | |
tree | e9d741a393e2178c5b90f48df0d0e3975f564e63 /BSPTree.h | |
parent | 823e55c9c49cf97531b66e6b15c41d9f9003bc32 (diff) | |
parent | d439daec66c28f85debc2479e95eadb5fc3c00a2 (diff) | |
download | c3d-e744ab213aeaccfe1aea6050907019aad9cf1911.tar c3d-e744ab213aeaccfe1aea6050907019aad9cf1911.zip |
Merge branch 'master' of git://git.gamezock.de/c3d
Conflicts:
Cubehole.cpp
Cubehole.h
DisplayClass.cpp
Trapezocube.cpp
Diffstat (limited to 'BSPTree.h')
-rw-r--r-- | BSPTree.h | 38 |
1 files changed, 11 insertions, 27 deletions
@@ -79,32 +79,21 @@ class BSPTree { template<typename T> void visit(const T& visitor, const vmml::vec3f &p) { - if(plane.isBehind(p)) { - if(frontTree) - frontTree->visit(visitor, p); - - for(std::list<Triangle>::iterator t = triangles.begin(); t != triangles.end(); ++t) { - visitor(*t); - } - - if(backTree) - backTree->visit(visitor, p); - } - else { - if(backTree) - backTree->visit(visitor, p); - - for(std::list<Triangle>::iterator t = triangles.begin(); t != triangles.end(); ++t) { - visitor(*t); - } - - if(frontTree) - frontTree->visit(visitor, p); - } + doVisit<const T>(visitor, p); } template<typename T> void visit(T& visitor, const vmml::vec3f &p) { + doVisit(visitor, p); + } + + private: + Plane plane; + std::list<Triangle> triangles; + BSPTree *frontTree, *backTree; + + template<typename T> + void doVisit(T& visitor, const vmml::vec3f &p) { if(plane.isBehind(p)) { if(frontTree) frontTree->visit(visitor, p); @@ -129,11 +118,6 @@ class BSPTree { } } - private: - Plane plane; - std::list<Triangle> triangles; - BSPTree *frontTree, *backTree; - static vmml::vec3f findCenter(const std::list<Triangle> &triangles); static const Triangle* findNearestTriangle(const std::list<Triangle> &triangles, const vmml::vec3f &v); }; |