History

Alternative look-at gaze left/right with face trackers too

Instead of looking at one or other eye depending on look direction.

David Rowe committed 11 years ago

Commit 26cbb141 parent fada70f1 file · +14 −24Browse files

Showing the changes to interface/src/Application.cpp (1 of 1 file). Show all

Unified · Split

interface/src/Application.cpp+14−24
@@ -2284,36 +2284,26 @@ void Application::updateMyAvatarLookAtPosition() { · 2283 unmodified lines
2284 } else {2284 } else {
2285 AvatarSharedPointer lookingAt = _myAvatar->getLookAtTargetAvatar().lock();2285 AvatarSharedPointer lookingAt = _myAvatar->getLookAtTargetAvatar().lock();
2286 if (lookingAt && _myAvatar != lookingAt.get()) {2286 if (lookingAt && _myAvatar != lookingAt.get()) {
2287 // If I am looking at someone else, look directly at one of their eyes
2287 isLookingAtSomeone = true;2288 isLookingAtSomeone = true;
2288 Head* lookingAtHead = static_cast<Avatar*>(lookingAt.get())->getHead();2289 Head* lookingAtHead = static_cast<Avatar*>(lookingAt.get())->getHead();
2289 2290
2290 // If I am looking at someone else, look directly at one of their eyes2291 const float MAXIMUM_FACE_ANGLE = 65.0f * RADIANS_PER_DEGREE;
2291 if (tracker && !tracker->isMuted()) {2292 glm::vec3 lookingAtFaceOrientation = lookingAtHead->getFinalOrientationInWorldFrame() * IDENTITY_FRONT;
2292 // If a face tracker is active, look at the eye for the side my gaze is biased toward2293 glm::vec3 fromLookingAtToMe = glm::normalize(_myAvatar->getHead()->getEyePosition()
2293 if (tracker->getEstimatedEyeYaw() > _myAvatar->getHead()->getFinalYaw()) {2294 - lookingAtHead->getEyePosition());
2294 lookAtSpot = lookingAtHead->getRightEyePosition();2295 float faceAngle = glm::angle(lookingAtFaceOrientation, fromLookingAtToMe);
2295 } else {
2296 lookAtSpot = lookingAtHead->getLeftEyePosition();
2297 }
2298 } else {
2299 2296
2300 const float MAXIMUM_FACE_ANGLE = 65.0f * RADIANS_PER_DEGREE;2297 if (faceAngle < MAXIMUM_FACE_ANGLE) {
2301 glm::vec3 lookingAtFaceOrientation = lookingAtHead->getFinalOrientationInWorldFrame() * IDENTITY_FRONT;2298 // Randomly look back and forth between left and right eyes
2302 glm::vec3 fromLookingAtToMe = glm::normalize(_myAvatar->getHead()->getEyePosition()2299 if (_myAvatar->isLookingAtLeftEye()) {
2303 - lookingAtHead->getEyePosition());2300 lookAtSpot = lookingAtHead->getLeftEyePosition();
2304 float faceAngle = glm::angle(lookingAtFaceOrientation, fromLookingAtToMe);
2305
2306 if (faceAngle < MAXIMUM_FACE_ANGLE) {
2307 // Randomly look back and forth between left and right eyes
2308 if (_myAvatar->isLookingAtLeftEye()) {
2309 lookAtSpot = lookingAtHead->getLeftEyePosition();
2310 } else {
2311 lookAtSpot = lookingAtHead->getRightEyePosition();
2312 }
2313 } else {2301 } else {
2314 // Just look at their head (mid point between eyes)2302 lookAtSpot = lookingAtHead->getRightEyePosition();
2315 lookAtSpot = lookingAtHead->getEyePosition();
2316 }2303 }
2304 } else {
2305 // Just look at their head (mid point between eyes)
2306 lookAtSpot = lookingAtHead->getEyePosition();
2317 }2307 }
2318 } else {2308 } else {
2319 // I am not looking at anyone else, so just look forward2309 // I am not looking at anyone else, so just look forward