From d15ef280f657ea90bc3693c9f84ba70b4c9437b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Georges=20Dup=C3=A9ron?= Date: Sat, 27 Oct 2012 16:34:16 +0200 Subject: [PATCH] Fixed SplitBox/MergeBox boundaries. --- rules/chose.cpp | 19 ++++++++++--------- rules/couleursDimensions.cpp | 4 ++-- view.cpp | 4 ++-- 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/rules/chose.cpp b/rules/chose.cpp index c7a3b7c..bd42629 100644 --- a/rules/chose.cpp +++ b/rules/chose.cpp @@ -140,8 +140,9 @@ void Chose::addBBPoints(const Quad q, float height) { } void Chose::updateAABB() { - float splitFactor = Dimensions::splitFactor * LODFactor(); - float mergeFactor = Dimensions::mergeFactor * LODFactor(); + float thisSplitFactor = Dimensions::splitFactor * LODFactor(); + // TODO : adapt mergeFactor to Camera::moveSensitivity + float thisMergeFactor = thisSplitFactor * std::max(1.01f, Dimensions::mergeFactor); float nonFacingFactor = 2.f/3.f; lod.firstBBPoint = true; getBoundingBoxPoints(); @@ -152,13 +153,13 @@ void Chose::updateAABB() { for (int i = 0; i < 3; i++) areaFacing[i] = size[(i+1)%3]*size[(i+1)%3]; for (int i = 0; i < 3; i++) { - float pseudoLength = std::max(1.f, std::sqrt(areaFacing[i] + areaFacing[(i+1)%3] * nonFacingFactor + areaFacing[(i+1)%3] * nonFacingFactor)); - float splitIncrement = std::min(Dimensions::backFrustum, splitFactor * pseudoLength); - float mergeIncrement = std::min(Dimensions::backFrustum * mergeFactor/splitFactor, mergeFactor * pseudoLength); - 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; + float pseudoLength = std::max(size[i]/2.f, std::sqrt(areaFacing[i] + areaFacing[(i+1)%3] * nonFacingFactor + areaFacing[(i+1)%3] * nonFacingFactor)); + float splitDistance = thisSplitFactor * pseudoLength; + float mergeDistance = thisMergeFactor * pseudoLength; + lod.splitBox[2*i] = center[i] - splitDistance; + lod.splitBox[2*i+1] = center[i] + splitDistance; + lod.mergeBox[2*i] = center[i] - mergeDistance; + lod.mergeBox[2*i+1] = center[i] + mergeDistance; } } diff --git a/rules/couleursDimensions.cpp b/rules/couleursDimensions.cpp index cb35093..72d25bf 100644 --- a/rules/couleursDimensions.cpp +++ b/rules/couleursDimensions.cpp @@ -2,7 +2,7 @@ const unsigned int Couleurs::fog = mix(cielHaut, cielBas, 0.5); -const float Dimensions::splitFactor = 4.f; -const float Dimensions::mergeFactor = 4.5f; +const float Dimensions::splitFactor = 1.f; +const float Dimensions::mergeFactor = 1.25f; const float Dimensions::frontFrustum = 1.f; const float Dimensions::backFrustum = 4000 * 100; // 4km diff --git a/view.cpp b/view.cpp index 1bf7ed3..4cba708 100644 --- a/view.cpp +++ b/view.cpp @@ -165,8 +165,8 @@ void View::renderScene(int lastTime, int currentTime) { float fps = (int)(1000/(currentTime-lastTime)); char text[100]; // Text snprintf(&(text[0]), 100, "FPS: %4.2f", fps); - std::cout << "\r" << fps << " "; - std::cout.flush(); + std::cerr << "\r" << fps << " "; + std::cerr.flush(); /* glLoadIdentity (); glDisable(GL_LIGHTING);