From 0361f468326fa5c289adf58e6673e584a26d250c Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Mon, 3 Mar 2014 12:09:38 -0800 Subject: [PATCH] Don't simulate avatars' models when they're being rendered as billboards. Closes #2165. --- interface/src/avatar/Avatar.cpp | 8 ++++---- interface/src/avatar/Head.cpp | 13 ++++++------- interface/src/avatar/Head.h | 2 +- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index d537b86854..7ada8b0764 100644 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -135,10 +135,10 @@ void Avatar::simulate(float deltaTime) { getHand()->simulate(deltaTime, false); _skeletonModel.setLODDistance(getLODDistance()); - _skeletonModel.simulate(deltaTime, _shouldRenderBillboard); - glm::vec3 headPosition; - if (!_skeletonModel.getHeadPosition(headPosition)) { - headPosition = _position; + glm::vec3 headPosition = _position; + if (!_shouldRenderBillboard) { + _skeletonModel.simulate(deltaTime); + _skeletonModel.getHeadPosition(headPosition); } Head* head = getHead(); head->setPosition(headPosition); diff --git a/interface/src/avatar/Head.cpp b/interface/src/avatar/Head.cpp index 91cf3ab07f..74bf983eb1 100644 --- a/interface/src/avatar/Head.cpp +++ b/interface/src/avatar/Head.cpp @@ -58,7 +58,7 @@ void Head::reset() { -void Head::simulate(float deltaTime, bool isMine, bool delayLoad) { +void Head::simulate(float deltaTime, bool isMine, bool billboard) { // Update audio trailing average for rendering facial animations Faceshift* faceshift = Application::getInstance()->getFaceshift(); @@ -75,7 +75,7 @@ void Head::simulate(float deltaTime, bool isMine, bool delayLoad) { } } - if (!_isFaceshiftConnected) { + if (!(_isFaceshiftConnected || billboard)) { // Update eye saccades const float AVERAGE_MICROSACCADE_INTERVAL = 0.50f; const float AVERAGE_SACCADE_INTERVAL = 4.0f; @@ -161,11 +161,10 @@ void Head::simulate(float deltaTime, bool isMine, bool delayLoad) { if (!isMine) { _faceModel.setLODDistance(static_cast(_owningAvatar)->getLODDistance()); } - _faceModel.simulate(deltaTime, delayLoad); - - // the blend face may have custom eye meshes - if (!_faceModel.getEyePositions(_leftEyePosition, _rightEyePosition)) { - _leftEyePosition = _rightEyePosition = getPosition(); + _leftEyePosition = _rightEyePosition = getPosition(); + if (!billboard) { + _faceModel.simulate(deltaTime); + _faceModel.getEyePositions(_leftEyePosition, _rightEyePosition); } _eyePosition = calculateAverageEyePosition(); } diff --git a/interface/src/avatar/Head.h b/interface/src/avatar/Head.h index 5c8e1e8769..7e7a96a3a7 100644 --- a/interface/src/avatar/Head.h +++ b/interface/src/avatar/Head.h @@ -36,7 +36,7 @@ public: void init(); void reset(); - void simulate(float deltaTime, bool isMine, bool delayLoad = false); + void simulate(float deltaTime, bool isMine, bool billboard = false); void render(float alpha); void setScale(float scale); void setPosition(glm::vec3 position) { _position = position; }