From 14a18606709edd4e74116fbc68deab74f7236ca4 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 6 Oct 2015 18:08:30 -0700 Subject: [PATCH] Do not change keyhole radius --- interface/src/avatar/Avatar.cpp | 10 ++-------- libraries/octree/src/ViewFrustum.cpp | 13 +++++++------ libraries/octree/src/ViewFrustum.h | 2 +- 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index ad714fefc8..ac55f6de83 100644 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -552,13 +552,7 @@ void Avatar::render(RenderArgs* renderArgs, const glm::vec3& cameraPosition) { auto& frustum = *renderArgs->_viewFrustum; auto textPosition = getDisplayNamePosition(); - // In the view frustum - auto keyhole = frustum.getKeyholeRadius(); - frustum.setKeyholeRadius(-1.0f); - auto inFrustum = frustum.pointInFrustum(textPosition) == ViewFrustum::INSIDE; - frustum.setKeyholeRadius(keyhole); - - if (inFrustum) { + if (frustum.pointInFrustum(textPosition, true) == ViewFrustum::INSIDE) { renderDisplayName(batch, frustum, textPosition); } } @@ -746,7 +740,7 @@ glm::vec3 Avatar::getDisplayNamePosition() const { } Transform Avatar::calculateDisplayNameTransform(const ViewFrustum& frustum, const glm::vec3& textPosition) const { - Q_ASSERT_X(frustum.pointInFrustum(textPosition) == ViewFrustum::INSIDE, + Q_ASSERT_X(frustum.pointInFrustum(textPosition, true) == ViewFrustum::INSIDE, "Avatar::calculateDisplayNameTransform", "Text not in viewfrustum."); glm::vec3 toFrustum = frustum.getPosition() - textPosition; diff --git a/libraries/octree/src/ViewFrustum.cpp b/libraries/octree/src/ViewFrustum.cpp index 820ab32b67..fd175a8e5b 100644 --- a/libraries/octree/src/ViewFrustum.cpp +++ b/libraries/octree/src/ViewFrustum.cpp @@ -241,20 +241,21 @@ ViewFrustum::location ViewFrustum::boxInKeyhole(const AABox& box) const { return result; } -ViewFrustum::location ViewFrustum::pointInFrustum(const glm::vec3& point) const { +ViewFrustum::location ViewFrustum::pointInFrustum(const glm::vec3& point, bool ignoreKeyhole) const { ViewFrustum::location regularResult = INSIDE; ViewFrustum::location keyholeResult = OUTSIDE; // If we have a keyholeRadius, check that first, since it's cheaper - if (_keyholeRadius >= 0.0f) { + if (!ignoreKeyhole && _keyholeRadius >= 0.0f) { keyholeResult = pointInKeyhole(point); - } - if (keyholeResult == INSIDE) { - return keyholeResult; + + if (keyholeResult == INSIDE) { + return keyholeResult; + } } // If we're not known to be INSIDE the keyhole, then check the regular frustum - for(int i=0; i < 6; i++) { + for(int i = 0; i < 6; ++i) { float distance = _planes[i].distance(point); if (distance < 0) { return keyholeResult; // escape early will be the value from checking the keyhole diff --git a/libraries/octree/src/ViewFrustum.h b/libraries/octree/src/ViewFrustum.h index fe40cfd53c..596d042506 100644 --- a/libraries/octree/src/ViewFrustum.h +++ b/libraries/octree/src/ViewFrustum.h @@ -79,7 +79,7 @@ public: typedef enum {OUTSIDE, INTERSECT, INSIDE} location; - ViewFrustum::location pointInFrustum(const glm::vec3& point) const; + ViewFrustum::location pointInFrustum(const glm::vec3& point, bool ignoreKeyhole = false) const; ViewFrustum::location sphereInFrustum(const glm::vec3& center, float radius) const; ViewFrustum::location cubeInFrustum(const AACube& cube) const; ViewFrustum::location boxInFrustum(const AABox& box) const;