From 8a32d230a880c930f010d7f498ce1003d9d26eba Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Tue, 4 Jun 2019 12:57:36 -0700 Subject: [PATCH] avoid div by zero --- libraries/entities/src/EntityTree.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/libraries/entities/src/EntityTree.cpp b/libraries/entities/src/EntityTree.cpp index 652266bd48..dbc347631d 100644 --- a/libraries/entities/src/EntityTree.cpp +++ b/libraries/entities/src/EntityTree.cpp @@ -827,7 +827,12 @@ EntityItemID EntityTree::evalRayIntersection(const glm::vec3& origin, const glm: PickFilter searchFilter, OctreeElementPointer& element, float& distance, BoxFace& face, glm::vec3& surfaceNormal, QVariantMap& extraInfo, Octree::lockType lockType, bool* accurateResult) { - RayArgs args = { origin, direction, 1.0f / direction, entityIdsToInclude, entityIdsToDiscard, + + // calculate dirReciprocal like this rather than with glm's scalar / vec3 template to avoid NaNs. + vec3 dirReciprocal = glm::vec3(direction.x == 0.0f ? 0.0f : 1.0f / direction.x, + direction.y == 0.0f ? 0.0f : 1.0f / direction.y, + direction.z == 0.0f ? 0.0f : 1.0f / direction.z); + RayArgs args = { origin, direction, dirReciprocal, entityIdsToInclude, entityIdsToDiscard, searchFilter, element, distance, face, surfaceNormal, extraInfo, EntityItemID() }; distance = FLT_MAX;