www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit ed7b0f1ead6c6da891c51e6292df17bba04b7f74
parent b333f10d0b05147002fac7eb05da7de0bdee8b1c
Author: Georges Dupéron <jahvascriptmaniac+github@free.fr>
Date:   Thu, 22 Dec 2011 18:57:07 +0100

Merge fonctionne.

Diffstat:
Mlod.cpp | 15++++++++++++---
Mlod.hh | 3+++
Mmain.cpp | 2+-
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);