From 738c5658fa403b64d642325696b2f0aac3efff26 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Thu, 6 Aug 2015 20:46:51 -0700 Subject: [PATCH] Guard against NaNs in eye tracker look-at position --- interface/src/devices/EyeTracker.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/interface/src/devices/EyeTracker.cpp b/interface/src/devices/EyeTracker.cpp index 0e24dde8ee..c8942a889b 100644 --- a/interface/src/devices/EyeTracker.cpp +++ b/interface/src/devices/EyeTracker.cpp @@ -76,20 +76,27 @@ void EyeTracker::processData(smi_CallbackDataStruct* data) { float rightLinePlaneDotProduct = glm::dot(rightLineDirection, planeNormal); // Gaze into distance if eyes are parallel or diverged; otherwise the look-at is the average of look-at points + glm::vec3 lookAtPosition; if (abs(leftLinePlaneDotProduct) <= FLT_EPSILON || abs(rightLinePlaneDotProduct) <= FLT_EPSILON) { - _lookAtPosition = monocularDirection * (float)TREE_SCALE; + lookAtPosition = monocularDirection * (float)TREE_SCALE; } else { float leftDistance = glm::dot(planePoint - leftLinePoint, planeNormal) / leftLinePlaneDotProduct; float rightDistance = glm::dot(planePoint - rightLinePoint, planeNormal) / rightLinePlaneDotProduct; if (leftDistance <= 0.0f || rightDistance <= 0.0f || leftDistance > (float)TREE_SCALE || rightDistance > (float)TREE_SCALE) { - _lookAtPosition = monocularDirection * (float)TREE_SCALE; + lookAtPosition = monocularDirection * (float)TREE_SCALE; } else { glm::vec3 leftIntersectionPoint = leftLinePoint + leftDistance * leftLineDirection; glm::vec3 rightIntersectionPoint = rightLinePoint + rightDistance * rightLineDirection; - _lookAtPosition = (leftIntersectionPoint + rightIntersectionPoint) / 2.0f; + lookAtPosition = (leftIntersectionPoint + rightIntersectionPoint) / 2.0f; } } + + if (glm::isnan(lookAtPosition.x) || glm::isnan(lookAtPosition.y) || glm::isnan(lookAtPosition.z)) { + return; + } + + _lookAtPosition = lookAtPosition; } } #endif