Correction des poids du LOD.
This commit is contained in:
parent
7eea489203
commit
3572c337d6
2
lod.hh
2
lod.hh
|
@ -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;
|
||||||
|
|
|
@ -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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user