From fae26d901cb3d30eba78277e13641aa9d885f53d Mon Sep 17 00:00:00 2001 From: David Rowe Date: Tue, 4 Aug 2015 18:34:56 -0700 Subject: [PATCH] Add menu option to render look-at targets --- interface/src/Menu.cpp | 1 + interface/src/Menu.h | 1 + interface/src/avatar/Avatar.cpp | 2 ++ interface/src/avatar/Avatar.h | 1 + interface/src/avatar/Head.cpp | 17 +++++++++++++++++ interface/src/avatar/Head.h | 3 +++ tests/ui/src/main.cpp | 1 + 7 files changed, 26 insertions(+) diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 4a77a342a2..c124f2caec 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -461,6 +461,7 @@ Menu::Menu() { addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::RenderHeadCollisionShapes); addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::RenderBoundingCollisionShapes); addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::RenderLookAtVectors, 0, false); + addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::RenderLookAtTargets, 0, false); addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::RenderFocusIndicator, 0, false); addCheckableActionToQMenuAndActionHash(avatarDebugMenu, MenuOption::ShowWhosLookingAtMe, 0, false); addCheckableActionToQMenuAndActionHash(avatarDebugMenu, diff --git a/interface/src/Menu.h b/interface/src/Menu.h index 70186f3307..ce5388449f 100644 --- a/interface/src/Menu.h +++ b/interface/src/Menu.h @@ -234,6 +234,7 @@ namespace MenuOption { const QString RenderBoundingCollisionShapes = "Show Bounding Collision Shapes"; const QString RenderFocusIndicator = "Show Eye Focus"; const QString RenderHeadCollisionShapes = "Show Head Collision Shapes"; + const QString RenderLookAtTargets = "Show Look-at Targets"; const QString RenderLookAtVectors = "Show Look-at Vectors"; const QString RenderSkeletonCollisionShapes = "Show Skeleton Collision Shapes"; const QString RenderTargetFramerate = "Framerate"; diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index e29e5e4408..abb671f207 100644 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -69,6 +69,8 @@ namespace render { auto avatarPtr = static_pointer_cast(avatar); bool renderLookAtVectors = Menu::getInstance()->isOptionChecked(MenuOption::RenderLookAtVectors); avatarPtr->setDisplayingLookatVectors(renderLookAtVectors); + bool renderLookAtTarget = Menu::getInstance()->isOptionChecked(MenuOption::RenderLookAtTargets); + avatarPtr->setDisplayingLookatTarget(renderLookAtTarget); if (avatarPtr->isInitialized() && args) { avatarPtr->render(args, Application::getInstance()->getCamera()->getPosition()); diff --git a/interface/src/avatar/Avatar.h b/interface/src/avatar/Avatar.h index 6035c44389..07a5ea2b89 100644 --- a/interface/src/avatar/Avatar.h +++ b/interface/src/avatar/Avatar.h @@ -91,6 +91,7 @@ public: //setters void setDisplayingLookatVectors(bool displayingLookatVectors) { getHead()->setRenderLookatVectors(displayingLookatVectors); } + void setDisplayingLookatTarget(bool displayingLookatTarget) { getHead()->setRenderLookatTarget(displayingLookatTarget); } void setIsLookAtTarget(const bool isLookAtTarget) { _isLookAtTarget = isLookAtTarget; } bool getIsLookAtTarget() const { return _isLookAtTarget; } //getters diff --git a/interface/src/avatar/Head.cpp b/interface/src/avatar/Head.cpp index 481a8ca9e8..aa7084b8e0 100644 --- a/interface/src/avatar/Head.cpp +++ b/interface/src/avatar/Head.cpp @@ -46,6 +46,7 @@ Head::Head(Avatar* owningAvatar) : _mouth3(0.0f), _mouth4(0.0f), _renderLookatVectors(false), + _renderLookatTarget(false), _saccade(0.0f, 0.0f, 0.0f), _saccadeTarget(0.0f, 0.0f, 0.0f), _leftEyeBlinkVelocity(0.0f), @@ -305,6 +306,9 @@ void Head::render(RenderArgs* renderArgs, float alpha, ViewFrustum* renderFrustu if (_renderLookatVectors) { renderLookatVectors(renderArgs, _leftEyePosition, _rightEyePosition, getCorrectedLookAtPosition()); } + if (_renderLookatTarget) { + renderLookatTarget(renderArgs, getCorrectedLookAtPosition()); + } } void Head::setScale (float scale) { @@ -414,4 +418,17 @@ void Head::renderLookatVectors(RenderArgs* renderArgs, glm::vec3 leftEyePosition geometryCache->renderLine(batch, rightEyePosition, lookatPosition, startColor, endColor, _rightEyeLookAtID); } +void Head::renderLookatTarget(RenderArgs* renderArgs, glm::vec3 lookatPosition) { + auto& batch = *renderArgs->_batch; + auto transform = Transform{}; + transform.setTranslation(lookatPosition); + batch.setModelTransform(transform); + auto deferredLighting = DependencyManager::get(); + deferredLighting->bindSimpleProgram(batch); + + auto geometryCache = DependencyManager::get(); + const float LOOK_AT_TARGET_RADIUS = 0.03f; + const glm::vec4 LOOK_AT_TARGET_COLOR = { 0.8f, 0.0f, 0.0f, 0.75f }; + geometryCache->renderSphere(batch, LOOK_AT_TARGET_RADIUS, 15, 15, LOOK_AT_TARGET_COLOR, true); +} diff --git a/interface/src/avatar/Head.h b/interface/src/avatar/Head.h index a1c70f9dff..dff4702246 100644 --- a/interface/src/avatar/Head.h +++ b/interface/src/avatar/Head.h @@ -39,6 +39,7 @@ public: void setAverageLoudness(float averageLoudness) { _averageLoudness = averageLoudness; } void setReturnToCenter (bool returnHeadToCenter) { _returnHeadToCenter = returnHeadToCenter; } void setRenderLookatVectors(bool onOff) { _renderLookatVectors = onOff; } + void setRenderLookatTarget(bool onOff) { _renderLookatTarget = onOff; } /// \return orientationBase+Delta glm::quat getFinalOrientationInLocalFrame() const; @@ -123,6 +124,7 @@ private: float _mouth3; float _mouth4; bool _renderLookatVectors; + bool _renderLookatTarget; glm::vec3 _saccade; glm::vec3 _saccadeTarget; float _leftEyeBlinkVelocity; @@ -151,6 +153,7 @@ private: // private methods void renderLookatVectors(RenderArgs* renderArgs, glm::vec3 leftEyePosition, glm::vec3 rightEyePosition, glm::vec3 lookatPosition); + void renderLookatTarget(RenderArgs* renderArgs, glm::vec3 lookatPosition); void calculateMouthShapes(); void applyEyelidOffset(glm::quat headOrientation); diff --git a/tests/ui/src/main.cpp b/tests/ui/src/main.cpp index e8ab7e02df..2de2e1e6c6 100644 --- a/tests/ui/src/main.cpp +++ b/tests/ui/src/main.cpp @@ -177,6 +177,7 @@ public: RenderFocusIndicator, RenderHeadCollisionShapes, RenderLookAtVectors, + RenderLookAtTargets, RenderSkeletonCollisionShapes, RenderTargetFramerate, RenderTargetFramerateUnlimited,