From ca9f0c01c1ce1698bdc9d7f506b76fabedfd2b2a Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Thu, 27 Mar 2014 11:08:55 -0700 Subject: [PATCH] Couple of quick fixes: reset the skeleton joints when space is pressed as a last resort to fix broken IK, don't render display names at the origin if we don't have a skeleton model. --- interface/src/avatar/Avatar.cpp | 10 +++++++--- interface/src/avatar/MyAvatar.cpp | 1 + interface/src/renderer/Model.cpp | 7 +++++++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index de9b33d9c7..94e1416e68 100644 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -397,9 +397,13 @@ void Avatar::renderDisplayName() { glPushMatrix(); glm::vec3 textPosition; - getSkeletonModel().getNeckPosition(textPosition); - textPosition += getBodyUpDirection() * getHeadHeight() * 1.1f; - + if (getSkeletonModel().getNeckPosition(textPosition)) { + textPosition += getBodyUpDirection() * getHeadHeight() * 1.1f; + } else { + const float HEAD_PROPORTION = 0.75f; + textPosition = _position + getBodyUpDirection() * (getBillboardSize() * HEAD_PROPORTION); + } + glTranslatef(textPosition.x, textPosition.y, textPosition.z); // we need "always facing camera": we must remove the camera rotation from the stack diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 618cda1199..350b4fb2be 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -79,6 +79,7 @@ void MyAvatar::reset() { // TODO? resurrect headMouse stuff? //_headMouseX = _glWidget->width() / 2; //_headMouseY = _glWidget->height() / 2; + _skeletonModel.reset(); getHead()->reset(); getHand()->reset(); diff --git a/interface/src/renderer/Model.cpp b/interface/src/renderer/Model.cpp index df5560a4b1..36ac6bec99 100644 --- a/interface/src/renderer/Model.cpp +++ b/interface/src/renderer/Model.cpp @@ -130,9 +130,16 @@ void Model::init() { } void Model::reset() { + if (_jointStates.isEmpty()) { + return; + } foreach (Model* attachment, _attachments) { attachment->reset(); } + const FBXGeometry& geometry = _geometry->getFBXGeometry(); + for (int i = 0; i < _jointStates.size(); i++) { + _jointStates[i].rotation = geometry.joints.at(i).rotation; + } } void Model::clearShapes() {