diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index a946a19bd9..922790ebc5 100644 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -207,18 +207,23 @@ void Avatar::render() { renderBody(); } - // render sphere when far away - const float MAX_ANGLE = 10.f; + // render voice intensity sphere for avatars that are farther away + const float MAX_SPHERE_ANGLE = 10.f; + const float MIN_SPHERE_ANGLE = 1.f; + const float MIN_SPHERE_SIZE = 0.01; + const float SPHERE_LOUDNESS_SCALING = 0.0005f; + const float SPHERE_COLOR[] = { 0.5f, 0.8f, 0.8f }; float height = getSkeletonHeight(); glm::vec3 delta = height * (getHead()->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); + float sphereRadius = getHead()->getAverageLoudness() * SPHERE_LOUDNESS_SCALING; + + if ((sphereRadius > MIN_SPHERE_SIZE) && (angle < MAX_SPHERE_ANGLE) && (angle > MIN_SPHERE_ANGLE)) { + glColor4f(SPHERE_COLOR[0], SPHERE_COLOR[1], SPHERE_COLOR[2], 1.f - angle / MAX_SPHERE_ANGLE); glPushMatrix(); glTranslatef(_position.x, _position.y, _position.z); - glScalef(height / 2.f, height / 2.f, height / 2.f); - glutSolidSphere(1.2f + getHead()->getAverageLoudness() * .0005f, 20, 20); + glScalef(height, height, height); + glutSolidSphere(sphereRadius, 15, 15); glPopMatrix(); } }