From 1b4daa8eb968e1496d30bb634f63432f86861867 Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Wed, 9 Oct 2013 10:17:41 -0700 Subject: [PATCH 1/5] No glow on own avatar, only on others when farther than five units away. --- interface/src/avatar/Avatar.cpp | 7 ++++--- interface/src/avatar/MyAvatar.cpp | 3 --- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index c278f9b697..5e95dcafdf 100755 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -465,15 +465,16 @@ void Avatar::render(bool lookingInMirror, bool renderAvatarBalls) { renderDiskShadow(_position, glm::vec3(0.0f, 1.0f, 0.0f), _scale * 0.1f, 0.2f); { - // glow when moving - Glower glower(_moving ? 1.0f : 0.0f); + // glow when moving in the distance + glm::vec3 toTarget = _position - Application::getInstance()->getAvatar()->getPosition(); + const float GLOW_DISTANCE = 5.0f; + Glower glower(_moving && glm::length(toTarget) > GLOW_DISTANCE ? 1.0f : 0.0f); // render body renderBody(lookingInMirror, renderAvatarBalls); // render sphere when far away const float MAX_ANGLE = 10.f; - glm::vec3 toTarget = _position - Application::getInstance()->getAvatar()->getPosition(); glm::vec3 delta = _height * (_head.getCameraOrientation() * IDENTITY_UP) / 2.f; float angle = abs(angleBetween(toTarget + delta, toTarget - delta)); diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index f7c26e75aa..57a8954ba3 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -555,9 +555,6 @@ void MyAvatar::renderBody(bool lookingInMirror, bool renderAvatarBalls) { return; } - // glow when moving - Glower glower(_moving ? 1.0f : 0.0f); - if (_head.getFace().isFullFrame()) { // Render the full-frame video float alpha = getBallRenderAlpha(BODY_BALL_HEAD_BASE, lookingInMirror); From dfd5f7d53e0d5d24457dcdb9e146b2ed72bcfa09 Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Wed, 9 Oct 2013 10:40:20 -0700 Subject: [PATCH 2/5] Fix for screwy view when you lean too far forward. --- libraries/voxels/src/ViewFrustum.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libraries/voxels/src/ViewFrustum.cpp b/libraries/voxels/src/ViewFrustum.cpp index b6249ad3ab..51d7639678 100644 --- a/libraries/voxels/src/ViewFrustum.cpp +++ b/libraries/voxels/src/ViewFrustum.cpp @@ -401,6 +401,10 @@ void ViewFrustum::computeOffAxisFrustum(float& left, float& right, float& bottom far = max(far, -corners[i].z); } + // make sure the near clip isn't too small to be valid + const float MIN_NEAR = 0.01f; + near = max(MIN_NEAR, near); + // get the near/far normal and use it to find the clip planes glm::vec4 normal = eyeMatrix * glm::vec4(0.0f, 0.0f, 1.0f, 0.0f); nearClipPlane = glm::vec4(-normal.x, -normal.y, -normal.z, glm::dot(normal, corners[0])); From a679517596cd273f3b8f8b5bb82a2888cabd0c87 Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Wed, 9 Oct 2013 11:10:51 -0700 Subject: [PATCH 3/5] Fix for jaundiced eyes. --- interface/src/avatar/BlendFace.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/interface/src/avatar/BlendFace.cpp b/interface/src/avatar/BlendFace.cpp index 280dd6a5cc..ca49edd24b 100644 --- a/interface/src/avatar/BlendFace.cpp +++ b/interface/src/avatar/BlendFace.cpp @@ -191,6 +191,9 @@ bool BlendFace::render(float alpha) { glEnable(GL_TEXTURE_2D); glDisable(GL_COLOR_MATERIAL); + // the eye shader uses the color state even though color material is disabled + glColor4f(1.0f, 1.0f, 1.0f, alpha); + for (int i = 0; i < networkMeshes.size(); i++) { const NetworkMesh& networkMesh = networkMeshes.at(i); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, networkMesh.indexBufferID); From 0a54c2f1e900e661ee4bd2dbaadf1b85fda1b218 Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Wed, 9 Oct 2013 11:52:56 -0700 Subject: [PATCH 4/5] Tweaking the growing heads. --- interface/src/Application.cpp | 8 ++++---- interface/src/avatar/Avatar.cpp | 26 ++++++++++++++++++++------ interface/src/avatar/Avatar.h | 2 ++ 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 4299fcbf6a..83b5e2fb8c 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1644,9 +1644,9 @@ Avatar* Application::findLookatTargetAvatar(const glm::vec3& mouseRayOrigin, con glm::vec3 headPosition = avatar->getHead().getPosition(); float distance; if (rayIntersectsSphere(mouseRayOrigin, mouseRayDirection, headPosition, - HEAD_SPHERE_RADIUS * avatar->getScale(), distance)) { + HEAD_SPHERE_RADIUS * avatar->getHead().getScale(), distance)) { eyePosition = avatar->getHead().getEyePosition(); - _lookatIndicatorScale = avatar->getScale(); + _lookatIndicatorScale = avatar->getHead().getScale(); _lookatOtherPosition = headPosition; nodeID = avatar->getOwningNode()->getNodeID(); return avatar; @@ -1787,8 +1787,8 @@ void Application::update(float deltaTime) { _faceshift.getEstimatedEyePitch(), _faceshift.getEstimatedEyeYaw(), 0.0f))) * glm::vec3(0.0f, 0.0f, -1.0f); } - updateLookatTargetAvatar(lookAtRayOrigin, lookAtRayDirection, lookAtSpot); - if (_lookatTargetAvatar) { + updateLookatTargetAvatar(mouseRayOrigin, mouseRayDirection, lookAtSpot); + if (_lookatTargetAvatar && !_faceshift.isActive()) { // If the mouse is over another avatar's head... _myAvatar.getHead().setLookAtPosition(lookAtSpot); } else if (_isHoverVoxel && !_faceshift.isActive()) { diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index 5e95dcafdf..8e452bf979 100755 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -102,6 +102,8 @@ Avatar::Avatar(Node* owningNode) : _leadingAvatar(NULL), _voxels(this), _moving(false), + _hoverOnDuration(0.0f), + _hoverOffDuration(0.0f), _initialized(false), _handHoldingPosition(0.0f, 0.0f, 0.0f), _maxArmLength(0.0f), @@ -388,15 +390,27 @@ void Avatar::simulate(float deltaTime, Transmitter* transmitter) { } // head scale grows when avatar is looked at + const float BASE_MAX_SCALE = 3.0f; + float maxScale = BASE_MAX_SCALE * glm::distance(_position, Application::getInstance()->getCamera()->getPosition()); if (Application::getInstance()->getLookatTargetAvatar() == this) { - const float BASE_MAX_SCALE = 3.0f; - const float GROW_SPEED = 0.1f; - _head.setScale(min(BASE_MAX_SCALE * glm::distance(_position, Application::getInstance()->getCamera()->getPosition()), - _head.getScale() + deltaTime * GROW_SPEED)); + _hoverOnDuration += deltaTime; + _hoverOffDuration = 0.0f; + + const float GROW_DELAY = 1.0f; + const float GROW_DURATION = 1.0f; + if (_hoverOnDuration > GROW_DELAY) { + _head.setScale(glm::mix(_head.getScale(), maxScale, 0.1f)); + } } else { - const float SHRINK_SPEED = 100.0f; - _head.setScale(max(_scale, _head.getScale() - deltaTime * SHRINK_SPEED)); + _hoverOnDuration = 0.0f; + _hoverOffDuration += deltaTime; + + const float SHRINK_DELAY = 1.0f; + const float SHRINK_DURATION = 1.0f; + if (_hoverOffDuration > SHRINK_DELAY) { + _head.setScale(glm::mix(_head.getScale(), 1.0f, 0.1f)); + } } _head.setBodyRotation(glm::vec3(_bodyPitch, _bodyYaw, _bodyRoll)); diff --git a/interface/src/avatar/Avatar.h b/interface/src/avatar/Avatar.h index 9396480d27..9f7a70de28 100755 --- a/interface/src/avatar/Avatar.h +++ b/interface/src/avatar/Avatar.h @@ -226,6 +226,8 @@ protected: AvatarVoxelSystem _voxels; bool _moving; ///< set when position is changing + float _hoverOnDuration; + float _hoverOffDuration; // protected methods... glm::vec3 getBodyRightDirection() const { return getOrientation() * IDENTITY_RIGHT; } From 604d6399eb90b004d7ee9f282ef39ad496f94b4c Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Wed, 9 Oct 2013 11:58:27 -0700 Subject: [PATCH 5/5] Fix for grow/shrink rates. --- interface/src/avatar/Avatar.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index f2181ad46c..917e135e5e 100755 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -397,9 +397,9 @@ void Avatar::simulate(float deltaTime, Transmitter* transmitter) { _hoverOffDuration = 0.0f; const float GROW_DELAY = 1.0f; - const float GROW_DURATION = 1.0f; + const float GROW_RATE = 0.25f; if (_hoverOnDuration > GROW_DELAY) { - _head.setScale(glm::mix(_head.getScale(), maxScale, 0.1f)); + _head.setScale(glm::mix(_head.getScale(), maxScale, GROW_RATE)); } } else { @@ -407,9 +407,9 @@ void Avatar::simulate(float deltaTime, Transmitter* transmitter) { _hoverOffDuration += deltaTime; const float SHRINK_DELAY = 1.0f; - const float SHRINK_DURATION = 1.0f; + const float SHRINK_RATE = 0.25f; if (_hoverOffDuration > SHRINK_DELAY) { - _head.setScale(glm::mix(_head.getScale(), 1.0f, 0.1f)); + _head.setScale(glm::mix(_head.getScale(), 1.0f, SHRINK_RATE)); } }