From ce1ebf8d11484ba87fdaec76629302741e6cb90a Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Mon, 4 Nov 2013 10:57:29 -0800 Subject: [PATCH] The Faceshift eye rotations are indeed relative to the head. --- interface/src/devices/Faceshift.cpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/interface/src/devices/Faceshift.cpp b/interface/src/devices/Faceshift.cpp index 4fb84b821c..9a45810cbe 100644 --- a/interface/src/devices/Faceshift.cpp +++ b/interface/src/devices/Faceshift.cpp @@ -63,22 +63,23 @@ void Faceshift::update() { if (!isActive()) { return; } - float averageEyePitch = (_eyeGazeLeftPitch + _eyeGazeRightPitch) / 2.0f; - float averageEyeYaw = (_eyeGazeLeftYaw + _eyeGazeRightYaw) / 2.0f; + // get the euler angles relative to the window + glm::vec3 eulers = safeEulerAngles(_headRotation * glm::quat(glm::radians(glm::vec3( + (_eyeGazeLeftPitch + _eyeGazeRightPitch) / 2.0f, (_eyeGazeLeftYaw + _eyeGazeRightYaw) / 2.0f, 0.0f)))); // compute and subtract the long term average const float LONG_TERM_AVERAGE_SMOOTHING = 0.999f; if (!_longTermAverageInitialized) { - _longTermAverageEyePitch = averageEyePitch; - _longTermAverageEyeYaw = averageEyeYaw; + _longTermAverageEyePitch = eulers.x; + _longTermAverageEyeYaw = eulers.y; _longTermAverageInitialized = true; } else { - _longTermAverageEyePitch = glm::mix(averageEyePitch, _longTermAverageEyePitch, LONG_TERM_AVERAGE_SMOOTHING); - _longTermAverageEyeYaw = glm::mix(averageEyeYaw, _longTermAverageEyeYaw, LONG_TERM_AVERAGE_SMOOTHING); + _longTermAverageEyePitch = glm::mix(eulers.x, _longTermAverageEyePitch, LONG_TERM_AVERAGE_SMOOTHING); + _longTermAverageEyeYaw = glm::mix(eulers.y, _longTermAverageEyeYaw, LONG_TERM_AVERAGE_SMOOTHING); } - _estimatedEyePitch = averageEyePitch - _longTermAverageEyePitch; - _estimatedEyeYaw = averageEyeYaw - _longTermAverageEyeYaw; + _estimatedEyePitch = eulers.x - _longTermAverageEyePitch; + _estimatedEyeYaw = eulers.y - _longTermAverageEyeYaw; } void Faceshift::reset() {