commit ed7b0f1ead6c6da891c51e6292df17bba04b7f74
parent b333f10d0b05147002fac7eb05da7de0bdee8b1c
Author: Georges Dupéron <jahvascriptmaniac+github@free.fr>
Date: Thu, 22 Dec 2011 18:57:07 +0100
Merge fonctionne.
Diffstat:
3 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/lod.cpp b/lod.cpp
@@ -2,7 +2,7 @@
Lod::Lod(Vertex camera, Chose* root) {
for (int i = 0; i < 6; i++) {
- merge[i].init(i, (i & 1) ? -1 : 1);
+ merge[i].init(i, (i & 1) ? 1 : -1);
splitIn[i].init(6+i, (i & 1) ? 1 : -1);
splitOut[i].init(12+i, (i & 1) ? -1 : 1);
}
@@ -25,8 +25,8 @@ void Lod::setCamera(Vertex newCamera) {
for(int j = 0; j < 6; j++) {
if(i == j) continue;
merge[j].remove(c);
- // TODO
}
+ doMerge(c);
}
}
// Split out vers split in.
@@ -67,6 +67,7 @@ void Lod::doSplit(Chose* c) {
// (*it)->drawAABB();
addSplitCube((*it));
}
+ addMergeCube(c);
}
// else {
// // Pour debug : quand on tente de split un objet qui ne peut
@@ -76,8 +77,16 @@ void Lod::doSplit(Chose* c) {
// }
}
+void Lod::doMerge(Chose* c) {
+ c->merge();
+ addSplitCube(c);
+}
+
void Lod::addMergeCube(Chose* chose) {
- for(int i = 0; i < 5; i++)
+ // Innutile de détecter si l'on est déjà sortis de la mergeBox :
+ // comme elle est plus grosse que la splitBox, on est forcément
+ // dedans.
+ for(int i = 0; i < 6; i++)
merge[i].insert(chose->lod.mergeBox[i], chose);
}
diff --git a/lod.hh b/lod.hh
@@ -4,12 +4,15 @@
class Lod {
private :
+ // TODO : puisqu'on utilise *soit* la mergeBox, *soit* la
+ // splitBox, réutiliser le heap In pour merge.
Heap merge[6]; // {xMin, xMax, yMin, yMax, zMin, zMax}.
Heap splitIn[6]; // {xMinIn, xMaxIn, yMinIn, yMaxIn, zMinIn, zMaxIn}.
Heap splitOut[6]; // {xMinOut, xMaxOut, yMinOut, yMaxOut, zMinOut, zMaxOut}.
float camera[3];
private:
void doSplit(Chose* c);
+ void doMerge(Chose* c);
public :
Lod(Vertex camera, Chose* root);
void addMergeCube(Chose* chose);
diff --git a/main.cpp b/main.cpp
@@ -30,7 +30,7 @@ int main() {
Chose* c = QuartierQuad::factory(Chose::initialSeed, 0, ne, se, sw, nw);
c->triangulation();
c->updateAABB();
- c->drawAABB();
+ // c->drawAABB();
// c->split();
// recursiveSubdivide(c);