Correction des poids du LOD.

This commit is contained in:
Georges Dupéron 2012-01-12 21:03:52 +01:00
parent 7eea489203
commit 3572c337d6
6 changed files with 9 additions and 10 deletions

2
lod.hh
View File

@ -24,7 +24,7 @@ public :
struct LodNode {
int heaps[18];
float aabb[6];
float splitBox[12];
float splitBox[6];
float mergeBox[6];
int inCounter;
bool firstBBPoint;

View File

@ -125,16 +125,15 @@ void Chose::updateAABB() {
float dx = lod.aabb[1] - lod.aabb[0];
float dy = lod.aabb[3] - lod.aabb[2];
float dz = lod.aabb[5] - lod.aabb[4];
float volume = dx*dy*dz;
float pseudoLength = std::max(1.f, std::pow(volume, 1.f/3.f) / 1000.f);
float splitFactor = 24 * pseudoLength;
float mergeFactor = 25 * pseudoLength;
// TODO pour la pseudoLength sur l'axe x, utiliser y*z, pseudolength_y = x*z, pseudolength_z = x*y.
float pseudoLength = std::sqrt(dx*dy + dy*dz + dx*dz);
float splitIncrement = 5 * pseudoLength;
float mergeIncrement = 6 * pseudoLength;
for (int i = 0; i < 3; i++) {
float center = (lod.aabb[2*i] + lod.aabb[2*i+1]) / 2;
lod.splitBox[2*i] = (lod.aabb[2*i] - center) * splitFactor + center;
lod.splitBox[2*i+1] = (lod.aabb[2*i+1] - center) * splitFactor + center;
lod.mergeBox[2*i] = (lod.aabb[2*i] - center) * mergeFactor + center;
lod.mergeBox[2*i+1] = (lod.aabb[2*i+1] - center) * mergeFactor + center;
lod.splitBox[2*i] = lod.aabb[2*i] - splitIncrement;
lod.splitBox[2*i+1] = lod.aabb[2*i+1] + splitIncrement;
lod.mergeBox[2*i] = lod.aabb[2*i] - mergeIncrement;
lod.mergeBox[2*i+1] = lod.aabb[2*i+1] + splitIncrement;
}
}