From e1ad9d3b4b1c730b8c39f3e1360f9d73f7381542 Mon Sep 17 00:00:00 2001 From: Philip Rosedale Date: Thu, 20 Nov 2014 17:26:11 -0600 Subject: [PATCH] Fix eyes jittering when turning away/toward someone --- interface/src/avatar/Avatar.h | 1 + interface/src/avatar/MyAvatar.cpp | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/interface/src/avatar/Avatar.h b/interface/src/avatar/Avatar.h index 376e229d0c..2d1a44403f 100644 --- a/interface/src/avatar/Avatar.h +++ b/interface/src/avatar/Avatar.h @@ -87,6 +87,7 @@ public: void setDisplayingLookatVectors(bool displayingLookatVectors) { getHead()->setRenderLookatVectors(displayingLookatVectors); } void setMouseRay(const glm::vec3 &origin, const glm::vec3 &direction); void setIsLookAtTarget(const bool isLookAtTarget) { _isLookAtTarget = isLookAtTarget; } + bool getIsLookAtTarget() const { return _isLookAtTarget; } //getters bool isInitialized() const { return _initialized; } SkeletonModel& getSkeletonModel() { return _skeletonModel; } diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 8b5fefc3be..39c88ef642 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -930,14 +930,16 @@ void MyAvatar::updateLookAtTargetAvatar() { glm::vec3 lookForward = faceRotation * IDENTITY_FRONT; glm::vec3 cameraPosition = Application::getInstance()->getCamera()->getPosition(); float smallestAngleTo = glm::radians(Application::getInstance()->getCamera()->getFieldOfView()) / 2.f; + const float KEEP_LOOKING_AT_CURRENT_ANGLE_FACTOR = 1.3f; int howManyLookingAtMe = 0; foreach (const AvatarSharedPointer& avatarPointer, Application::getInstance()->getAvatarManager().getAvatarHash()) { Avatar* avatar = static_cast(avatarPointer.data()); + bool isCurrentTarget = avatar->getIsLookAtTarget(); avatar->setIsLookAtTarget(false); if (!avatar->isMyAvatar() && avatar->isInitialized()) { float angleTo = glm::angle(lookForward, glm::normalize(avatar->getHead()->getEyePosition() - cameraPosition)); - if (angleTo < smallestAngleTo) { + if (angleTo < (smallestAngleTo * (isCurrentTarget ? KEEP_LOOKING_AT_CURRENT_ANGLE_FACTOR : 1.0f))) { _lookAtTargetAvatar = avatarPointer; _targetAvatarPosition = avatarPointer->getPosition(); smallestAngleTo = angleTo;