diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index fd54406137..67534836dc 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2329,13 +2329,13 @@ void Application::renderFollowIndicator() { if (leader != NULL) { glColor3f(1.f, 0.f, 0.f); - glVertex3f(avatar->getPosition().x, - avatar->getPosition().y, - avatar->getPosition().z); + glVertex3f((avatar->getHead().getPosition().x + avatar->getPosition().x) / 2.f, + (avatar->getHead().getPosition().y + avatar->getPosition().y) / 2.f, + (avatar->getHead().getPosition().z + avatar->getPosition().z) / 2.f); glColor3f(0.f, 1.f, 0.f); - glVertex3f(leader->getPosition().x, - leader->getPosition().y, - leader->getPosition().z); + glVertex3f((leader->getHead().getPosition().x + leader->getPosition().x) / 2.f, + (leader->getHead().getPosition().y + leader->getPosition().y) / 2.f, + (leader->getHead().getPosition().z + leader->getPosition().z) / 2.f); } } } @@ -2343,13 +2343,13 @@ void Application::renderFollowIndicator() { if (_myAvatar.getLeadingAvatar() != NULL) { glColor3f(1.f, 0.f, 0.f); - glVertex3f(_myAvatar.getPosition().x, - _myAvatar.getPosition().y, - _myAvatar.getPosition().z); + glVertex3f((_myAvatar.getHead().getPosition().x + _myAvatar.getPosition().x) / 2.f, + (_myAvatar.getHead().getPosition().y + _myAvatar.getPosition().y) / 2.f, + (_myAvatar.getHead().getPosition().z + _myAvatar.getPosition().z) / 2.f); glColor3f(0.f, 1.f, 0.f); - glVertex3f(_myAvatar.getLeadingAvatar()->getPosition().x, - _myAvatar.getLeadingAvatar()->getPosition().y, - _myAvatar.getLeadingAvatar()->getPosition().z); + glVertex3f((_myAvatar.getLeadingAvatar()->getHead().getPosition().x + _myAvatar.getLeadingAvatar()->getPosition().x) / 2.f, + (_myAvatar.getLeadingAvatar()->getHead().getPosition().y + _myAvatar.getLeadingAvatar()->getPosition().y) / 2.f, + (_myAvatar.getLeadingAvatar()->getHead().getPosition().z + _myAvatar.getLeadingAvatar()->getPosition().z) / 2.f); } glEnd(); @@ -3108,14 +3108,16 @@ void Application::displaySide(Camera& whichCamera) { } // Render my own Avatar - if (_myCamera.getMode() == CAMERA_MODE_MIRROR) { - _myAvatar.getHead().setLookAtPosition(_myCamera.getPosition()); - } - _myAvatar.render(_lookingInMirror->isChecked(), _renderAvatarBalls->isChecked()); - _myAvatar.setDisplayingLookatVectors(_renderLookatOn->isChecked()); + if (_myCamera.getMode() != CAMERA_MODE_FIRST_PERSON) { + if (_myCamera.getMode() == CAMERA_MODE_MIRROR) { + _myAvatar.getHead().setLookAtPosition(_myCamera.getPosition()); + } + _myAvatar.render(_lookingInMirror->isChecked(), _renderAvatarBalls->isChecked()); + _myAvatar.setDisplayingLookatVectors(_renderLookatOn->isChecked()); - if (_renderLookatIndicatorOn->isChecked() && _isLookingAtOtherAvatar) { - renderLookatIndicator(_lookatOtherPosition, whichCamera); + if (_renderLookatIndicatorOn->isChecked() && _isLookingAtOtherAvatar) { + renderLookatIndicator(_lookatOtherPosition, whichCamera); + } } } diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index c973a31f1e..b4e06b0dbf 100755 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -1174,6 +1174,23 @@ void Avatar::render(bool lookingInMirror, bool renderAvatarBalls) { // render body renderBody(lookingInMirror, renderAvatarBalls); + // render sphere when far away + if (!isMyAvatar()) { + 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)); + + if (angle < MAX_ANGLE) { + glColor4f(0.5f, 0.8f, 0.8f, 1.f - angle / MAX_ANGLE); + glPushMatrix(); + glTranslatef(_position.x, _position.y, _position.z); + glScalef(_height / 2.f, _height / 2.f, _height / 2.f); + glutSolidSphere(1.2f + _head.getAverageLoudness() * .0005f, 20, 20); + glPopMatrix(); + } + } + // if this is my avatar, then render my interactions with the other avatar if (isMyAvatar()) { _avatarTouch.render(Application::getInstance()->getCamera()->getPosition()); diff --git a/interface/src/avatar/Head.cpp b/interface/src/avatar/Head.cpp index 1f6f4159f6..f4b1603e8f 100644 --- a/interface/src/avatar/Head.cpp +++ b/interface/src/avatar/Head.cpp @@ -732,14 +732,15 @@ void Head::renderEyeBalls() { void Head::renderLookatVectors(glm::vec3 leftEyePosition, glm::vec3 rightEyePosition, glm::vec3 lookatPosition) { - glColor3f(0.0f, 0.0f, 0.0f); glLineWidth(2.0); - glBegin(GL_LINE_STRIP); + glBegin(GL_LINES); + glColor4f(0.2f, 0.2f, 0.2f, 1.f); glVertex3f(leftEyePosition.x, leftEyePosition.y, leftEyePosition.z); + glColor4f(1.0f, 1.0f, 1.0f, 0.f); glVertex3f(lookatPosition.x, lookatPosition.y, lookatPosition.z); - glEnd(); - glBegin(GL_LINE_STRIP); + glColor4f(0.2f, 0.2f, 0.2f, 1.f); glVertex3f(rightEyePosition.x, rightEyePosition.y, rightEyePosition.z); + glColor4f(1.0f, 1.0f, 1.0f, 0.f); glVertex3f(lookatPosition.x, lookatPosition.y, lookatPosition.z); glEnd(); }