diff --git a/interface/src/avatar/AvatarActionHold.cpp b/interface/src/avatar/AvatarActionHold.cpp index fe5355ff2e..a47bbbad1b 100644 --- a/interface/src/avatar/AvatarActionHold.cpp +++ b/interface/src/avatar/AvatarActionHold.cpp @@ -165,7 +165,7 @@ bool AvatarActionHold::getTarget(float deltaTimeStep, glm::quat& rotation, glm:: Transform avatarTransform; avatarTransform = myAvatar->getTransform(); - palmPosition = avatarTransform.transform(camRelPos / myAvatar->getDomainLimitedScale()); + palmPosition = avatarTransform.transform(camRelPos); palmRotation = avatarTransform.getRotation() * camRelRot; } else { glm::vec3 avatarRigidBodyPosition; diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index eca61d95c8..9654f989a0 100755 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -2940,30 +2940,6 @@ glm::mat4 MyAvatar::computeCameraRelativeHandControllerMatrix(const glm::mat4& c return glm::inverse(avatarMatrix) * controllerWorldMatrix; } -glm::vec3 MyAvatar::getAbsoluteJointScaleInObjectFrame(int index) const { - if (index < 0) { - index += numeric_limits::max() + 1; // 65536 - } - - // only sensor to world matrix has non identity scale. - switch (index) { - case CAMERA_RELATIVE_CONTROLLER_LEFTHAND_INDEX: { - auto pose = getControllerPoseInSensorFrame(controller::Action::LEFT_HAND); - glm::mat4 controllerSensorMatrix = createMatFromQuatAndPos(pose.rotation, pose.translation); - glm::mat4 result = computeCameraRelativeHandControllerMatrix(controllerSensorMatrix); - return extractScale(result); - } - case CAMERA_RELATIVE_CONTROLLER_RIGHTHAND_INDEX: { - auto pose = getControllerPoseInSensorFrame(controller::Action::RIGHT_HAND); - glm::mat4 controllerSensorMatrix = createMatFromQuatAndPos(pose.rotation, pose.translation); - glm::mat4 result = computeCameraRelativeHandControllerMatrix(controllerSensorMatrix); - return extractScale(result); - } - default: - return Avatar::getAbsoluteJointScaleInObjectFrame(index); - } -} - glm::quat MyAvatar::getAbsoluteJointRotationInObjectFrame(int index) const { if (index < 0) { index += numeric_limits::max() + 1; // 65536 diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 07ad61b271..1c7cd559a6 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -513,7 +513,6 @@ public: Q_INVOKABLE void setCharacterControllerEnabled(bool enabled); // deprecated Q_INVOKABLE bool getCharacterControllerEnabled(); // deprecated - virtual glm::vec3 getAbsoluteJointScaleInObjectFrame(int index) const override; virtual glm::quat getAbsoluteJointRotationInObjectFrame(int index) const override; virtual glm::vec3 getAbsoluteJointTranslationInObjectFrame(int index) const override; diff --git a/interface/src/raypick/JointRayPick.cpp b/interface/src/raypick/JointRayPick.cpp index 48ab908201..b4f0dde687 100644 --- a/interface/src/raypick/JointRayPick.cpp +++ b/interface/src/raypick/JointRayPick.cpp @@ -36,7 +36,7 @@ const PickRay JointRayPick::getPickRay(bool& valid) const { glm::quat rot = useAvatarHead ? jointRot * glm::angleAxis(-PI / 2.0f, Vectors::RIGHT) : avatarRot * jointRot; // Apply offset - pos = pos + (rot * _posOffset); + pos = pos + (rot * (myAvatar->getSensorToWorldScale() * _posOffset)); glm::vec3 dir = rot * glm::normalize(_dirOffset); valid = true; diff --git a/scripts/system/controllers/handControllerGrab.js b/scripts/system/controllers/handControllerGrab.js index e1c12604fe..dacacae5b3 100644 --- a/scripts/system/controllers/handControllerGrab.js +++ b/scripts/system/controllers/handControllerGrab.js @@ -1184,7 +1184,7 @@ function MyController(hand) { joint: (hand == RIGHT_HAND) ? "_CAMERA_RELATIVE_CONTROLLER_RIGHTHAND" : "_CAMERA_RELATIVE_CONTROLLER_LEFTHAND", filter: RayPick.PICK_ENTITIES | RayPick.PICK_OVERLAYS | RayPick.PICK_INCLUDE_NONCOLLIDABLE, maxDistance: PICK_MAX_DISTANCE, - posOffset: getGrabPointSphereOffset(this.handToController()), + posOffset: getGrabPointSphereOffset(this.handToController(), true), renderStates: renderStates, faceAvatar: true, defaultRenderStates: defaultRenderStates diff --git a/scripts/system/libraries/controllers.js b/scripts/system/libraries/controllers.js index dd73aa7f8d..d99fd0db48 100644 --- a/scripts/system/libraries/controllers.js +++ b/scripts/system/libraries/controllers.js @@ -18,7 +18,7 @@ getGrabCommunications = function getFarGrabCommunications() { // this offset needs to match the one in libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp:378 var GRAB_POINT_SPHERE_OFFSET = { x: 0.04, y: 0.13, z: 0.039 }; // x = upward, y = forward, z = lateral -getGrabPointSphereOffset = function(handController) { +getGrabPointSphereOffset = function(handController, ignoreSensorToWorldScale) { var offset = GRAB_POINT_SPHERE_OFFSET; if (handController === Controller.Standard.LeftHand) { offset = { @@ -27,7 +27,11 @@ getGrabPointSphereOffset = function(handController) { z: GRAB_POINT_SPHERE_OFFSET.z }; } - return Vec3.multiply(MyAvatar.sensorToWorldScale, offset); + if (ignoreSensorToWorldScale) { + return offset; + } else { + return Vec3.multiply(MyAvatar.sensorToWorldScale, offset); + } }; // controllerWorldLocation is where the controller would be, in-world, with an added offset