From 3137e9a3e6e32d6182b727a4ee94cc40c0d13ca0 Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Thu, 21 Nov 2013 13:57:55 -0800 Subject: [PATCH] Don't leave out the head when we draw our shadow. --- interface/src/Application.cpp | 13 ++++++------- interface/src/Application.h | 4 ++-- interface/src/avatar/Avatar.cpp | 16 ++++++++-------- interface/src/avatar/Avatar.h | 6 +++--- interface/src/avatar/Hand.cpp | 4 +--- interface/src/avatar/Hand.h | 3 +-- interface/src/avatar/MyAvatar.cpp | 18 +++++++++--------- interface/src/avatar/MyAvatar.h | 6 +++--- 8 files changed, 33 insertions(+), 37 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index a6a5a9e20f..b0d4611ac1 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1876,7 +1876,7 @@ bool Application::isLookingAtMyAvatar(Avatar* avatar) { return false; } -void Application::renderLookatIndicator(glm::vec3 pointOfInterest, Camera& whichCamera) { +void Application::renderLookatIndicator(glm::vec3 pointOfInterest) { const float DISTANCE_FROM_HEAD_SPHERE = 0.1f * _lookatIndicatorScale; const float INDICATOR_RADIUS = 0.1f * _lookatIndicatorScale; @@ -2822,7 +2822,7 @@ void Application::updateShadowMap() { glTranslatef(translation.x, translation.y, translation.z); - renderAvatars(_myCamera); + renderAvatars(true); glPopMatrix(); @@ -3182,7 +3182,7 @@ void Application::displaySide(Camera& whichCamera, bool selfAvatarOnly) { _myAvatar.renderScreenTint(SCREEN_TINT_BEFORE_AVATARS); - renderAvatars(whichCamera, selfAvatarOnly); + renderAvatars(whichCamera.getMode() == CAMERA_MODE_MIRROR, selfAvatarOnly); _myAvatar.renderScreenTint(SCREEN_TINT_AFTER_AVATARS); @@ -3806,7 +3806,7 @@ void Application::renderCoverageMapsRecursively(CoverageMap* map) { } } -void Application::renderAvatars(Camera& whichCamera, bool selfAvatarOnly) { +void Application::renderAvatars(bool forceRenderHead, bool selfAvatarOnly) { if (!Menu::getInstance()->isOptionChecked(MenuOption::Avatars)) { return; } @@ -3834,12 +3834,11 @@ void Application::renderAvatars(Camera& whichCamera, bool selfAvatarOnly) { } // Render my own Avatar - _myAvatar.render(whichCamera.getMode() == CAMERA_MODE_MIRROR, - Menu::getInstance()->isOptionChecked(MenuOption::AvatarAsBalls)); + _myAvatar.render(forceRenderHead, Menu::getInstance()->isOptionChecked(MenuOption::AvatarAsBalls)); _myAvatar.setDisplayingLookatVectors(Menu::getInstance()->isOptionChecked(MenuOption::LookAtVectors)); if (Menu::getInstance()->isOptionChecked(MenuOption::LookAtIndicator) && _lookatTargetAvatar) { - renderLookatIndicator(_lookatOtherPosition, whichCamera); + renderLookatIndicator(_lookatOtherPosition); } } diff --git a/interface/src/Application.h b/interface/src/Application.h index c91d17ecff..981938f221 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -262,7 +262,7 @@ private: glm::vec3& eyePosition, QUuid &nodeUUID); bool isLookingAtMyAvatar(Avatar* avatar); - void renderLookatIndicator(glm::vec3 pointOfInterest, Camera& whichCamera); + void renderLookatIndicator(glm::vec3 pointOfInterest); void renderFollowIndicator(); void updateAvatar(float deltaTime); void updateAvatars(float deltaTime, glm::vec3 mouseRayOrigin, glm::vec3 mouseRayDirection); @@ -276,7 +276,7 @@ private: void displaySide(Camera& whichCamera, bool selfAvatarOnly = false); void displayOverlay(); void displayStats(); - void renderAvatars(Camera& whichCamera, bool selfAvatarOnly = false); + void renderAvatars(bool forceRenderHead, bool selfAvatarOnly = false); void renderViewFrustum(ViewFrustum& viewFrustum); void checkBandwidthMeterClick(); diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index 829c4f4464..44e1f0aad1 100755 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -439,7 +439,7 @@ static TextRenderer* textRenderer() { return renderer; } -void Avatar::render(bool lookingInMirror, bool renderAvatarBalls) { +void Avatar::render(bool forceRenderHead, bool renderAvatarBalls) { if (Application::getInstance()->getAvatar()->getHand().isRaveGloveActive()) { _hand.setRaveLights(RAVE_LIGHTS_AVATAR); @@ -455,7 +455,7 @@ void Avatar::render(bool lookingInMirror, bool renderAvatarBalls) { Glower glower(_moving && glm::length(toTarget) > GLOW_DISTANCE ? 1.0f : 0.0f); // render body - renderBody(lookingInMirror, renderAvatarBalls); + renderBody(forceRenderHead, renderAvatarBalls); // render sphere when far away const float MAX_ANGLE = 10.f; @@ -709,15 +709,15 @@ glm::quat Avatar::computeRotationFromBodyToWorldUp(float proportion) const { return glm::angleAxis(angle * proportion, axis); } -float Avatar::getBallRenderAlpha(int ball, bool lookingInMirror) const { +float Avatar::getBallRenderAlpha(int ball, bool forceRenderHead) const { return 1.0f; } -void Avatar::renderBody(bool lookingInMirror, bool renderAvatarBalls) { +void Avatar::renderBody(bool forceRenderHead, bool renderAvatarBalls) { if (_head.getVideoFace().isFullFrame()) { // Render the full-frame video - float alpha = getBallRenderAlpha(BODY_BALL_HEAD_BASE, lookingInMirror); + float alpha = getBallRenderAlpha(BODY_BALL_HEAD_BASE, forceRenderHead); if (alpha > 0.0f) { _head.getVideoFace().render(1.0f); } @@ -726,7 +726,7 @@ void Avatar::renderBody(bool lookingInMirror, bool renderAvatarBalls) { glm::vec3 skinColor, darkSkinColor; getSkinColors(skinColor, darkSkinColor); for (int b = 0; b < NUM_AVATAR_BODY_BALLS; b++) { - float alpha = getBallRenderAlpha(b, lookingInMirror); + float alpha = getBallRenderAlpha(b, forceRenderHead); // When we have leap hands, hide part of the arms. if (_hand.getNumPalms() > 0) { @@ -779,7 +779,7 @@ void Avatar::renderBody(bool lookingInMirror, bool renderAvatarBalls) { } } else { // Render the body's voxels and head - float alpha = getBallRenderAlpha(BODY_BALL_HEAD_BASE, lookingInMirror); + float alpha = getBallRenderAlpha(BODY_BALL_HEAD_BASE, forceRenderHead); if (alpha > 0.0f) { if (!_skeletonModel.render(alpha)) { _voxels.render(false); @@ -787,7 +787,7 @@ void Avatar::renderBody(bool lookingInMirror, bool renderAvatarBalls) { _head.render(alpha, false); } } - _hand.render(lookingInMirror); + _hand.render(); } void Avatar::getSkinColors(glm::vec3& lighter, glm::vec3& darker) { diff --git a/interface/src/avatar/Avatar.h b/interface/src/avatar/Avatar.h index aad3e4ce72..d633871891 100755 --- a/interface/src/avatar/Avatar.h +++ b/interface/src/avatar/Avatar.h @@ -141,7 +141,7 @@ public: void init(); void simulate(float deltaTime, Transmitter* transmitter); void follow(Avatar* leadingAvatar); - void render(bool lookingInMirror, bool renderAvatarBalls); + void render(bool forceRenderHead, bool renderAvatarBalls); //setters void setDisplayingLookatVectors(bool displayingLookatVectors) { _head.setRenderLookatVectors(displayingLookatVectors); } @@ -255,8 +255,8 @@ private: // private methods... glm::vec3 calculateAverageEyePosition() { return _head.calculateAverageEyePosition(); } // get the position smack-dab between the eyes (for lookat) - float getBallRenderAlpha(int ball, bool lookingInMirror) const; - void renderBody(bool lookingInMirror, bool renderAvatarBalls); + float getBallRenderAlpha(int ball, bool forceRenderHead) const; + void renderBody(bool forceRenderHead, bool renderAvatarBalls); void initializeBodyBalls(); void resetBodyBalls(); void updateHandMovementAndTouching(float deltaTime, bool enableHandMovement); diff --git a/interface/src/avatar/Hand.cpp b/interface/src/avatar/Hand.cpp index ae22752acb..43fc8cc0de 100755 --- a/interface/src/avatar/Hand.cpp +++ b/interface/src/avatar/Hand.cpp @@ -24,7 +24,6 @@ Hand::Hand(Avatar* owningAvatar) : _raveGloveInitialized(false), _owningAvatar(owningAvatar), _renderAlpha(1.0), - _lookingInMirror(false), _ballColor(0.0, 0.0, 0.4) { // initialize all finger particle emitters with an invalid id as default @@ -133,10 +132,9 @@ void Hand::setRaveGloveEffectsMode(QKeyEvent* event) { }; } -void Hand::render(bool lookingInMirror) { +void Hand::render() { _renderAlpha = 1.0; - _lookingInMirror = lookingInMirror; if (Menu::getInstance()->isOptionChecked(MenuOption::DisplayLeapHands)) { if (!isRaveGloveActive()) { diff --git a/interface/src/avatar/Hand.h b/interface/src/avatar/Hand.h index 145ec67c15..36573cfc86 100755 --- a/interface/src/avatar/Hand.h +++ b/interface/src/avatar/Hand.h @@ -50,7 +50,7 @@ public: void init(); void reset(); void simulate(float deltaTime, bool isMine); - void render(bool lookingInMirror); + void render(); void renderRaveGloveStage(); void setRaveLights(RaveLightsSetting setting); @@ -75,7 +75,6 @@ private: Avatar* _owningAvatar; float _renderAlpha; - bool _lookingInMirror; glm::vec3 _ballColor; std::vector _leapFingerTipBalls; std::vector _leapFingerRootBalls; diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index d229e784e8..87f5165f1a 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -485,7 +485,7 @@ static TextRenderer* textRenderer() { return renderer; } -void MyAvatar::render(bool lookingInMirror, bool renderAvatarBalls) { +void MyAvatar::render(bool forceRenderHead, bool renderAvatarBalls) { if (Application::getInstance()->getAvatar()->getHand().isRaveGloveActive()) { _hand.setRaveLights(RAVE_LIGHTS_AVATAR); @@ -495,7 +495,7 @@ void MyAvatar::render(bool lookingInMirror, bool renderAvatarBalls) { renderDiskShadow(_position, glm::vec3(0.0f, 1.0f, 0.0f), _scale * 0.1f, 0.2f); // render body - renderBody(lookingInMirror, renderAvatarBalls); + renderBody(forceRenderHead, renderAvatarBalls); // if this is my avatar, then render my interactions with the other avatar _avatarTouch.render(Application::getInstance()->getCamera()->getPosition()); @@ -623,19 +623,19 @@ glm::vec3 MyAvatar::getEyeLevelPosition() const { glm::vec3(0.0f, _pelvisToHeadLength + _scale * BODY_BALL_RADIUS_HEAD_BASE * EYE_UP_OFFSET, 0.0f); } -float MyAvatar::getBallRenderAlpha(int ball, bool lookingInMirror) const { +float MyAvatar::getBallRenderAlpha(int ball, bool forceRenderHead) const { const float RENDER_OPAQUE_OUTSIDE = _scale * 0.25f; // render opaque if greater than this distance const float DO_NOT_RENDER_INSIDE = _scale * 0.25f; // do not render if less than this distance float distanceToCamera = glm::length(Application::getInstance()->getCamera()->getPosition() - _bodyBall[ball].position); - return (lookingInMirror) ? 1.0f : glm::clamp( + return (forceRenderHead) ? 1.0f : glm::clamp( (distanceToCamera - DO_NOT_RENDER_INSIDE) / (RENDER_OPAQUE_OUTSIDE - DO_NOT_RENDER_INSIDE), 0.f, 1.f); } -void MyAvatar::renderBody(bool lookingInMirror, bool renderAvatarBalls) { +void MyAvatar::renderBody(bool forceRenderHead, bool renderAvatarBalls) { if (_head.getVideoFace().isFullFrame()) { // Render the full-frame video - float alpha = getBallRenderAlpha(BODY_BALL_HEAD_BASE, lookingInMirror); + float alpha = getBallRenderAlpha(BODY_BALL_HEAD_BASE, forceRenderHead); if (alpha > 0.0f) { _head.getVideoFace().render(1.0f); } @@ -644,7 +644,7 @@ void MyAvatar::renderBody(bool lookingInMirror, bool renderAvatarBalls) { glm::vec3 skinColor, darkSkinColor; getSkinColors(skinColor, darkSkinColor); for (int b = 0; b < NUM_AVATAR_BODY_BALLS; b++) { - float alpha = getBallRenderAlpha(b, lookingInMirror); + float alpha = getBallRenderAlpha(b, forceRenderHead); // When we have leap hands, hide part of the arms. if (_hand.getNumPalms() > 0) { @@ -710,12 +710,12 @@ void MyAvatar::renderBody(bool lookingInMirror, bool renderAvatarBalls) { if (!_skeletonModel.render(1.0f)) { _voxels.render(false); } - float alpha = getBallRenderAlpha(BODY_BALL_HEAD_BASE, lookingInMirror); + float alpha = getBallRenderAlpha(BODY_BALL_HEAD_BASE, forceRenderHead); if (alpha > 0.0f) { _head.render(alpha, true); } } - _hand.render(lookingInMirror); + _hand.render(); } void MyAvatar::updateThrust(float deltaTime, Transmitter * transmitter) { diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 3747bb307e..b5f735a93e 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -20,7 +20,7 @@ public: void reset(); void simulate(float deltaTime, Transmitter* transmitter); void updateFromGyrosAndOrWebcam(float pitchFromTouch, bool turnWithHead); - void render(bool lookingInMirror, bool renderAvatarBalls); + void render(bool forceRenderHead, bool renderAvatarBalls); void renderScreenTint(ScreenTintLayer layer); // setters @@ -84,8 +84,8 @@ private: int _moveTargetStepCounter; // private methods - float getBallRenderAlpha(int ball, bool lookingInMirror) const; - void renderBody(bool lookingInMirror, bool renderAvatarBalls); + float getBallRenderAlpha(int ball, bool forceRenderHead) const; + void renderBody(bool forceRenderHead, bool renderAvatarBalls); void updateThrust(float deltaTime, Transmitter * transmitter); void updateHandMovementAndTouching(float deltaTime, bool enableHandMovement); void updateAvatarCollisions(float deltaTime);