From c8c371b6f492f5e9f7db6033d65b37eca6c465f1 Mon Sep 17 00:00:00 2001 From: Jose Carlos Date: Mon, 24 Feb 2014 22:02:06 +0100 Subject: [PATCH 1/6] Changed the displayname background rect: instead of having squared corners, they are bevel Added some test code to prevent the decay effect in the text rendering --- interface/src/Util.cpp | 72 +++++++++++++++++++++++++++++++++ interface/src/Util.h | 2 + interface/src/avatar/Avatar.cpp | 25 +++++++----- 3 files changed, 90 insertions(+), 9 deletions(-) diff --git a/interface/src/Util.cpp b/interface/src/Util.cpp index 73ec791714..3d54b7d1cb 100644 --- a/interface/src/Util.cpp +++ b/interface/src/Util.cpp @@ -554,6 +554,78 @@ void renderCircle(glm::vec3 position, float radius, glm::vec3 surfaceNormal, int } +void renderBeverCornersRect(int x, int y, int width, int height, int bevelDistance) { + glBegin(GL_POLYGON); + + // left side + glVertex2f(x, y + bevelDistance); + glVertex2f(x, y + height - bevelDistance); + + // top side + glVertex2f(x + bevelDistance, y + height); + glVertex2f(x + width - bevelDistance, y + height); + + // right + glVertex2f(x + width, y + height - bevelDistance); + glVertex2f(x + width, y + bevelDistance); + + // bottom + glVertex2f(x + width - bevelDistance, y); + glVertex2f(x +bevelDistance, y); + + glEnd(); +} + +void renderRoundedCornersRect(int x, int y, int width, int height, int radius, int numPointsCorner) { +#define MAX_POINTS_CORNER 50 + // At least "2" is needed + if (numPointsCorner <= 1) { + return; + } + if (numPointsCorner > MAX_POINTS_CORNER) { + numPointsCorner = MAX_POINTS_CORNER; + } + + // Precompute sin and cos for [0, pi/2) for the number of points (numPointCorner) + double radiusTimesSin[MAX_POINTS_CORNER]; + double radiusTimesCos[MAX_POINTS_CORNER]; + int i = 0; + for (int i = 0; i < numPointsCorner; i++) { + double t = i * PIf / (2.0f * (numPointsCorner - 1)); + radiusTimesSin[i] = radius * sin(t); + radiusTimesCos[i] = radius * cos(t); + } + + glm::dvec2 cornerCenter; + glBegin(GL_POINTS); + + // Top left corner + cornerCenter = glm::vec2(x + radius, y + height - radius); + for (i = 0; i < numPointsCorner; i++) { + glVertex2d(cornerCenter.x - radiusTimesCos[i], cornerCenter.y + radiusTimesSin[i]); + } + + // Top rigth corner + cornerCenter = glm::vec2(x + width - radius, y + height - radius); + for (i = 0; i < numPointsCorner; i++) { + glVertex2d(cornerCenter.x + radiusTimesSin[i], cornerCenter.y + radiusTimesCos[i]); + } + + // Bottom right + cornerCenter = glm::vec2(x + width - radius, y + radius); + for (i = 0; i < numPointsCorner; i++) { + glVertex2d(cornerCenter.x + radiusTimesCos[i], cornerCenter.y - radiusTimesSin[i]); + } + + // Bottom left + cornerCenter = glm::vec2(x + radius, y + radius); + for (i = 0; i < numPointsCorner; i++) { + glVertex2d(cornerCenter.x - radiusTimesSin[i], cornerCenter.y - radiusTimesCos[i]); + } + glEnd(); +} + + void renderOrientationDirections(glm::vec3 position, const glm::quat& orientation, float size) { glm::vec3 pRight = position + orientation * IDENTITY_RIGHT * size; glm::vec3 pUp = position + orientation * IDENTITY_UP * size; diff --git a/interface/src/Util.h b/interface/src/Util.h index 0c762ccd79..967279ce5e 100644 --- a/interface/src/Util.h +++ b/interface/src/Util.h @@ -73,6 +73,8 @@ void renderOrientationDirections( glm::vec3 position, const glm::quat& orientati void renderSphereOutline(glm::vec3 position, float radius, int numSides, glm::vec3 cameraPosition); void renderCircle(glm::vec3 position, float radius, glm::vec3 surfaceNormal, int numSides ); +void renderRoundedCornersRect(int x, int y, int width, int height, int radius, int numPointsCorner); +void renderBeverCornersRect(int x, int y, int width, int height, int bevelDistance); void runTimingTests(); diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index dcecd0258d..3bb1143598 100644 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -307,10 +307,19 @@ void Avatar::renderDisplayName() { glTranslatef(textPosition.x, textPosition.y, textPosition.z); + glm::dmat4 modelViewMatrix2; + glGetDoublev(GL_MODELVIEW_MATRIX, (GLdouble*)&modelViewMatrix2); + modelViewMatrix2[0][0] = 1; + modelViewMatrix2[1][1] = 1; + modelViewMatrix2[2][2] = 1; + modelViewMatrix2[0][1] = modelViewMatrix2[0][2] = 0; + modelViewMatrix2[1][0] = modelViewMatrix2[1][2] = 0; + modelViewMatrix2[2][0] = modelViewMatrix2[2][1] = 0; + glLoadMatrixd((GLdouble*)&modelViewMatrix2); // we need "always facing camera": we must remove the camera rotation from the stack - glm::quat rotation = Application::getInstance()->getCamera()->getRotation(); - glm::vec3 axis = glm::axis(rotation); - glRotatef(glm::angle(rotation), axis.x, axis.y, axis.z); + // glm::quat rotation = Application::getInstance()->getCamera()->getRotation(); + // glm::vec3 axis = glm::axis(rotation); + // glRotatef(glm::angle(rotation), axis.x, axis.y, axis.z); // We need to compute the scale factor such as the text remains with fixed size respect to window coordinates // We project a unit vector and check the difference in screen coordinates, to check which is the @@ -364,12 +373,10 @@ void Avatar::renderDisplayName() { glPolygonOffset(1.0f, 1.0f); glColor4f(0.2f, 0.2f, 0.2f, _displayNameAlpha * DISPLAYNAME_BACKGROUND_ALPHA / DISPLAYNAME_ALPHA); - glBegin(GL_QUADS); - glVertex2f(left, bottom); - glVertex2f(right, bottom); - glVertex2f(right, top); - glVertex2f(left, top); - glEnd(); + // glColor4f(1.0f, 0.2f, 0.2f, 1.0f); + // glScalef(10,10, 1); + + renderBeverCornersRect(left, bottom, right - left, top - bottom, 3); glColor4f(0.93f, 0.93f, 0.93f, _displayNameAlpha); From 438131f3e9039c71ec550298c96c78f473fccf74 Mon Sep 17 00:00:00 2001 From: Jose Carlos Date: Mon, 24 Feb 2014 22:38:50 +0100 Subject: [PATCH 2/6] Reverted myAvatar::render call to test if the decay effect is gone --- interface/src/avatar/AvatarManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index fed6716ffa..185216db69 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -83,7 +83,7 @@ void AvatarManager::renderAvatars(bool forceRenderMyHead, bool selfAvatarOnly) { avatar->init(); } if (avatar == static_cast(_myAvatar.data())) { - _myAvatar->render(forceRenderMyHead); + avatar->render(); } else { avatar->render(); } From ae87ab3b792b6262ace8caccfe7dbe10fabdb7c4 Mon Sep 17 00:00:00 2001 From: Jose Carlos Date: Mon, 24 Feb 2014 23:26:42 +0100 Subject: [PATCH 3/6] Undone a change to try to prevent the decay effect in the text rendering --- interface/src/avatar/Avatar.cpp | 22 ++++------------------ interface/src/avatar/AvatarManager.cpp | 2 +- 2 files changed, 5 insertions(+), 19 deletions(-) diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index afa00cc549..e8e703d8b2 100644 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -368,19 +368,10 @@ void Avatar::renderDisplayName() { glTranslatef(textPosition.x, textPosition.y, textPosition.z); - glm::dmat4 modelViewMatrix2; - glGetDoublev(GL_MODELVIEW_MATRIX, (GLdouble*)&modelViewMatrix2); - modelViewMatrix2[0][0] = 1; - modelViewMatrix2[1][1] = 1; - modelViewMatrix2[2][2] = 1; - modelViewMatrix2[0][1] = modelViewMatrix2[0][2] = 0; - modelViewMatrix2[1][0] = modelViewMatrix2[1][2] = 0; - modelViewMatrix2[2][0] = modelViewMatrix2[2][1] = 0; - glLoadMatrixd((GLdouble*)&modelViewMatrix2); // we need "always facing camera": we must remove the camera rotation from the stack - // glm::quat rotation = Application::getInstance()->getCamera()->getRotation(); - // glm::vec3 axis = glm::axis(rotation); - // glRotatef(glm::angle(rotation), axis.x, axis.y, axis.z); + glm::quat rotation = Application::getInstance()->getCamera()->getRotation(); + glm::vec3 axis = glm::axis(rotation); + glRotatef(glm::angle(rotation), axis.x, axis.y, axis.z); // We need to compute the scale factor such as the text remains with fixed size respect to window coordinates // We project a unit vector and check the difference in screen coordinates, to check which is the @@ -434,14 +425,9 @@ void Avatar::renderDisplayName() { glPolygonOffset(1.0f, 1.0f); glColor4f(0.2f, 0.2f, 0.2f, _displayNameAlpha * DISPLAYNAME_BACKGROUND_ALPHA / DISPLAYNAME_ALPHA); - // glColor4f(1.0f, 0.2f, 0.2f, 1.0f); - // glScalef(10,10, 1); - renderBeverCornersRect(left, bottom, right - left, top - bottom, 3); - - + glColor4f(0.93f, 0.93f, 0.93f, _displayNameAlpha); - QByteArray ba = _displayName.toLocal8Bit(); const char* text = ba.data(); diff --git a/interface/src/avatar/AvatarManager.cpp b/interface/src/avatar/AvatarManager.cpp index 185216db69..fed6716ffa 100644 --- a/interface/src/avatar/AvatarManager.cpp +++ b/interface/src/avatar/AvatarManager.cpp @@ -83,7 +83,7 @@ void AvatarManager::renderAvatars(bool forceRenderMyHead, bool selfAvatarOnly) { avatar->init(); } if (avatar == static_cast(_myAvatar.data())) { - avatar->render(); + _myAvatar->render(forceRenderMyHead); } else { avatar->render(); } From 976732120e2ac78f9b42de04066b97e1ff188a2f Mon Sep 17 00:00:00 2001 From: Jose Carlos Date: Mon, 24 Feb 2014 23:33:25 +0100 Subject: [PATCH 4/6] fixed typo --- interface/src/Util.cpp | 2 +- interface/src/Util.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/src/Util.cpp b/interface/src/Util.cpp index 3d54b7d1cb..183ef116e6 100644 --- a/interface/src/Util.cpp +++ b/interface/src/Util.cpp @@ -554,7 +554,7 @@ void renderCircle(glm::vec3 position, float radius, glm::vec3 surfaceNormal, int } -void renderBeverCornersRect(int x, int y, int width, int height, int bevelDistance) { +void renderBevelCornersRect(int x, int y, int width, int height, int bevelDistance) { glBegin(GL_POLYGON); // left side diff --git a/interface/src/Util.h b/interface/src/Util.h index 967279ce5e..5710be5f2b 100644 --- a/interface/src/Util.h +++ b/interface/src/Util.h @@ -74,7 +74,7 @@ void renderOrientationDirections( glm::vec3 position, const glm::quat& orientati void renderSphereOutline(glm::vec3 position, float radius, int numSides, glm::vec3 cameraPosition); void renderCircle(glm::vec3 position, float radius, glm::vec3 surfaceNormal, int numSides ); void renderRoundedCornersRect(int x, int y, int width, int height, int radius, int numPointsCorner); -void renderBeverCornersRect(int x, int y, int width, int height, int bevelDistance); +void renderBevelCornersRect(int x, int y, int width, int height, int bevelDistance); void runTimingTests(); From 64e75bb4abd08c57f32ef664f8592f50184b7690 Mon Sep 17 00:00:00 2001 From: Jose Carlos Date: Tue, 25 Feb 2014 00:19:52 +0100 Subject: [PATCH 5/6] fixed typo --- interface/src/avatar/Avatar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index e8e703d8b2..03efd00861 100644 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -425,7 +425,7 @@ void Avatar::renderDisplayName() { glPolygonOffset(1.0f, 1.0f); glColor4f(0.2f, 0.2f, 0.2f, _displayNameAlpha * DISPLAYNAME_BACKGROUND_ALPHA / DISPLAYNAME_ALPHA); - renderBeverCornersRect(left, bottom, right - left, top - bottom, 3); + renderBevelCornersRect(left, bottom, right - left, top - bottom, 3); glColor4f(0.93f, 0.93f, 0.93f, _displayNameAlpha); QByteArray ba = _displayName.toLocal8Bit(); From 11e9b18a981cc5456d5cfc97aa6f1de2e6dd265a Mon Sep 17 00:00:00 2001 From: Philip Rosedale Date: Tue, 25 Feb 2014 12:35:14 -0800 Subject: [PATCH 6/6] =?UTF-8?q?Don=E2=80=99t=20render=20avatar=20=E2=80=98?= =?UTF-8?q?sphere=E2=80=99=20unless=20there=20is=20voice=20intensity?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- interface/src/avatar/Avatar.cpp | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) 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(); } }