From 14ec9b431e8f0283b08b3b3e535b7f31b7f52b9b Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Wed, 25 Feb 2015 10:26:44 -0800 Subject: [PATCH 1/2] Update findRayRectangleIntersection to set out variable distance --- libraries/shared/src/GeometryUtil.cpp | 6 +++--- libraries/shared/src/GeometryUtil.h | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/libraries/shared/src/GeometryUtil.cpp b/libraries/shared/src/GeometryUtil.cpp index cf15830a10..13d78ec8b3 100644 --- a/libraries/shared/src/GeometryUtil.cpp +++ b/libraries/shared/src/GeometryUtil.cpp @@ -494,8 +494,8 @@ void PolygonClip::copyCleanArray(int& lengthA, glm::vec2* vertexArrayA, int& len } } -bool findRayRectangleIntersection(const glm::vec3& origin, const glm::vec3& direction, - const glm::quat& rotation, const glm::vec3& position, const glm::vec2& dimensions) { +bool findRayRectangleIntersection(const glm::vec3& origin, const glm::vec3& direction, const glm::quat& rotation, + const glm::vec3& position, const glm::vec2& dimensions, float& distance) { RayIntersectionInfo rayInfo; rayInfo._rayStart = origin; rayInfo._rayDirection = direction; @@ -511,7 +511,7 @@ bool findRayRectangleIntersection(const glm::vec3& origin, const glm::vec3& dire bool intersects = plane.findRayIntersection(rayInfo); if (intersects) { - float distance = rayInfo._hitDistance; + distance = rayInfo._hitDistance; glm::vec3 hitPosition = origin + (distance * direction); glm::vec3 localHitPosition = glm::inverse(rotation) * (hitPosition - position); diff --git a/libraries/shared/src/GeometryUtil.h b/libraries/shared/src/GeometryUtil.h index e0de536e97..657a06a604 100644 --- a/libraries/shared/src/GeometryUtil.h +++ b/libraries/shared/src/GeometryUtil.h @@ -76,8 +76,8 @@ bool findRaySphereIntersection(const glm::vec3& origin, const glm::vec3& directi bool findRayCapsuleIntersection(const glm::vec3& origin, const glm::vec3& direction, const glm::vec3& start, const glm::vec3& end, float radius, float& distance); -bool findRayRectangleIntersection(const glm::vec3& origin, const glm::vec3& direction, - const glm::quat& rotation, const glm::vec3& position, const glm::vec2& dimensions); +bool findRayRectangleIntersection(const glm::vec3& origin, const glm::vec3& direction, const glm::quat& rotation, + const glm::vec3& position, const glm::vec2& dimensions, float& distance); bool findRayTriangleIntersection(const glm::vec3& origin, const glm::vec3& direction, const glm::vec3& v0, const glm::vec3& v1, const glm::vec3& v2, float& distance); From c499352ad8eaded4abe879ec63cfd05c9571042f Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Wed, 25 Feb 2015 10:27:11 -0800 Subject: [PATCH 2/2] Update billboard and planar overlays to use new findRayRectangleIntersection signature --- interface/src/ui/overlays/BillboardOverlay.cpp | 2 +- interface/src/ui/overlays/Planar3DOverlay.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/src/ui/overlays/BillboardOverlay.cpp b/interface/src/ui/overlays/BillboardOverlay.cpp index a82da0ee5f..88c097575b 100644 --- a/interface/src/ui/overlays/BillboardOverlay.cpp +++ b/interface/src/ui/overlays/BillboardOverlay.cpp @@ -209,7 +209,7 @@ bool BillboardOverlay::findRayIntersection(const glm::vec3& origin, const glm::v float maxSize = glm::max(width, height); glm::vec2 dimensions = _scale * glm::vec2(width / maxSize, height / maxSize); - return findRayRectangleIntersection(origin, direction, rotation, _position, dimensions); + return findRayRectangleIntersection(origin, direction, rotation, _position, dimensions, distance); } return false; diff --git a/interface/src/ui/overlays/Planar3DOverlay.cpp b/interface/src/ui/overlays/Planar3DOverlay.cpp index 925725d261..aea6585fc4 100644 --- a/interface/src/ui/overlays/Planar3DOverlay.cpp +++ b/interface/src/ui/overlays/Planar3DOverlay.cpp @@ -95,5 +95,5 @@ QScriptValue Planar3DOverlay::getProperty(const QString& property) { bool Planar3DOverlay::findRayIntersection(const glm::vec3& origin, const glm::vec3& direction, float& distance, BoxFace& face) { - return findRayRectangleIntersection(origin, direction, _rotation, _position, _dimensions); + return findRayRectangleIntersection(origin, direction, _rotation, _position, _dimensions, distance); }