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 { struct LodNode {
int heaps[18]; int heaps[18];
float aabb[6]; float aabb[6];
float splitBox[12]; float splitBox[6];
float mergeBox[6]; float mergeBox[6];
int inCounter; int inCounter;
bool firstBBPoint; bool firstBBPoint;

View File

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