Merge fonctionne.

This commit is contained in:
Georges Dupéron 2011-12-22 18:57:07 +01:00
parent b333f10d0b
commit ed7b0f1ead
3 changed files with 16 additions and 4 deletions

15
lod.cpp
View File

@ -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);
}

3
lod.hh
View File

@ -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);

View File

@ -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);