From 274bf33318d06924fcdd6bd537f7723254c6792b Mon Sep 17 00:00:00 2001 From: amantley Date: Tue, 7 Aug 2018 18:29:51 -0700 Subject: [PATCH] fix for the avatar scale reset when we re-enter hmd mode --- interface/src/Application.cpp | 1 - interface/src/avatar/MyAvatar.cpp | 6 ++++++ interface/src/avatar/MySkeletonModel.cpp | 2 ++ libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp | 1 + libraries/render-utils/src/Model.cpp | 1 + 5 files changed, 10 insertions(+), 1 deletion(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 0bbd2b1c17..d1871c7692 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -8133,7 +8133,6 @@ void Application::setDisplayPlugin(DisplayPluginPointer newDisplayPlugin) { // reset the avatar, to set head and hand palms back to a reasonable default pose. getMyAvatar()->reset(false); - // switch to first person if entering hmd and setting is checked if (menu) { QAction* action = menu->getActionForOption(newDisplayPlugin->getName()); diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 3f738ea4cb..0fdd7edb7a 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -806,6 +806,7 @@ void MyAvatar::updateSensorToWorldMatrix() { // update the sensor mat so that the body position will end up in the desired // position when driven from the head. float sensorToWorldScale = getEyeHeight() / getUserEyeHeight(); + qCDebug(interfaceapp) << sensorToWorldScale; glm::mat4 desiredMat = createMatFromScaleQuatAndPos(glm::vec3(sensorToWorldScale), getWorldOrientation(), getWorldPosition()); _sensorToWorldMatrix = desiredMat * glm::inverse(_bodySensorMatrix); @@ -1742,6 +1743,10 @@ controller::Pose MyAvatar::getControllerPoseInSensorFrame(controller::Action act controller::Pose MyAvatar::getControllerPoseInWorldFrame(controller::Action action) const { auto pose = getControllerPoseInSensorFrame(action); + glm::mat4 printout = getSensorToWorldMatrix(); + if (action == controller::Action::HEAD) { + //qCDebug(interfaceapp) << "matrix 4 sensor to world" << printout; + } if (pose.valid) { return pose.transform(getSensorToWorldMatrix()); } else { @@ -1751,6 +1756,7 @@ controller::Pose MyAvatar::getControllerPoseInWorldFrame(controller::Action acti controller::Pose MyAvatar::getControllerPoseInAvatarFrame(controller::Action action) const { auto pose = getControllerPoseInWorldFrame(action); + // qCDebug(interfaceapp) << " the head position in world frame is " << pose.getTranslation(); if (pose.valid) { glm::mat4 invAvatarMatrix = glm::inverse(createMatFromQuatAndPos(getWorldOrientation(), getWorldPosition())); return pose.transform(invAvatarMatrix); diff --git a/interface/src/avatar/MySkeletonModel.cpp b/interface/src/avatar/MySkeletonModel.cpp index 0fc5e7521e..6bc0c8fefa 100644 --- a/interface/src/avatar/MySkeletonModel.cpp +++ b/interface/src/avatar/MySkeletonModel.cpp @@ -116,7 +116,9 @@ void MySkeletonModel::updateRig(float deltaTime, glm::mat4 parentTransform) { // input action is the highest priority source for head orientation. auto avatarHeadPose = myAvatar->getControllerPoseInAvatarFrame(controller::Action::HEAD); + if (avatarHeadPose.isValid()) { + //qCDebug(interfaceapp) << " the head position in avatar frame is " << avatarHeadPose.getTranslation(); AnimPose pose(avatarHeadPose.getRotation(), avatarHeadPose.getTranslation()); params.primaryControllerPoses[Rig::PrimaryControllerType_Head] = avatarToRigPose * pose; params.primaryControllerFlags[Rig::PrimaryControllerType_Head] = (uint8_t)Rig::ControllerFlags::Enabled; diff --git a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp index 69356cdfaa..0fda5be77b 100644 --- a/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp +++ b/libraries/avatars-renderer/src/avatars-renderer/Avatar.cpp @@ -1761,6 +1761,7 @@ void Avatar::ensureInScene(AvatarSharedPointer self, const render::ScenePointer& // thread-safe float Avatar::getEyeHeight() const { + qCDebug(animation) << "modelscale "<