(cherry picked from commit d97a8c2e7eace2494d3142e8187022a33aedc060)
Unified · Split
| @@ -376,9 +376,10 @@ void HmdDisplayPlugin::updateFrameData() { · 375 unmodified lines | |||
| 376 | } | 376 | } |
| 377 | 377 | ||
| 378 | // this offset needs to match GRAB_POINT_SPHERE_OFFSET in scripts/system/libraries/controllers.js | 378 | // this offset needs to match GRAB_POINT_SPHERE_OFFSET in scripts/system/libraries/controllers.js |
| 379 | //static const vec3 GRAB_POINT_SPHERE_OFFSET = vec3(0.1f, 0.04f, -0.32f); | 379 | static const vec3 GRAB_POINT_SPHERE_OFFSET(0.075f, 0.175f, 0.039f); |
| 380 | static const vec3 GRAB_POINT_SPHERE_OFFSET = vec3(0.0f, 0.0f, -0.175f); | 380 | |
| 381 | vec3 grabPointOffset = GRAB_POINT_SPHERE_OFFSET; | 381 | // swizzle grab point so that (x = upward, y = inward, z = forward) |
| 382 | vec3 grabPointOffset = glm::vec3(GRAB_POINT_SPHERE_OFFSET.x, GRAB_POINT_SPHERE_OFFSET.z, -GRAB_POINT_SPHERE_OFFSET.y); | ||
| 382 | if (i == 0) { | 383 | if (i == 0) { |
| 383 | grabPointOffset.x *= -1.0f; // this changes between left and right hands | 384 | grabPointOffset.x *= -1.0f; // this changes between left and right hands |
| 384 | } | 385 | } |
| @@ -34,7 +34,9 @@ const vec3& Vectors::UP = Vectors::UNIT_Y; · 33 unmodified lines | |||
| 34 | const vec3& Vectors::FRONT = Vectors::UNIT_NEG_Z; | 34 | const vec3& Vectors::FRONT = Vectors::UNIT_NEG_Z; |
| 35 | 35 | ||
| 36 | const quat Quaternions::IDENTITY{ 1.0f, 0.0f, 0.0f, 0.0f }; | 36 | const quat Quaternions::IDENTITY{ 1.0f, 0.0f, 0.0f, 0.0f }; |
| 37 | const quat Quaternions::X_180{ 0.0f, 1.0f, 0.0f, 0.0f }; | ||
| 37 | const quat Quaternions::Y_180{ 0.0f, 0.0f, 1.0f, 0.0f }; | 38 | const quat Quaternions::Y_180{ 0.0f, 0.0f, 1.0f, 0.0f }; |
| 39 | const quat Quaternions::Z_180{ 0.0f, 0.0f, 0.0f, 1.0f }; | ||
| 38 | 40 | ||
| 39 | // Safe version of glm::mix; based on the code in Nick Bobick's article, | 41 | // Safe version of glm::mix; based on the code in Nick Bobick's article, |
| 40 | // http://www.gamasutra.com/features/19980703/quaternions_01.htm (via Clyde, | 42 | // http://www.gamasutra.com/features/19980703/quaternions_01.htm (via Clyde, |
| @@ -58,7 +58,9 @@ glm::quat safeMix(const glm::quat& q1, const glm::quat& q2, float alpha); · 57 unmodified lines | |||
| 58 | class Quaternions { | 58 | class Quaternions { |
| 59 | public: | 59 | public: |
| 60 | static const quat IDENTITY; | 60 | static const quat IDENTITY; |
| 61 | static const quat X_180; | ||
| 61 | static const quat Y_180; | 62 | static const quat Y_180; |
| 63 | static const quat Z_180; | ||
| 62 | }; | 64 | }; |
| 63 | 65 | ||
| 64 | class Vectors { | 66 | class Vectors { |
| @@ -299,10 +299,11 @@ controller::Pose openVrControllerPoseToHandPose(bool isLeftHand, const mat4& mat · 298 unmodified lines | |||
| 299 | static const glm::quat leftRotationOffset = glm::inverse(leftQuarterZ * eighthX) * touchToHand; | 299 | static const glm::quat leftRotationOffset = glm::inverse(leftQuarterZ * eighthX) * touchToHand; |
| 300 | static const glm::quat rightRotationOffset = glm::inverse(rightQuarterZ * eighthX) * touchToHand; | 300 | static const glm::quat rightRotationOffset = glm::inverse(rightQuarterZ * eighthX) * touchToHand; |
| 301 | 301 | ||
| 302 | static const float CONTROLLER_LENGTH_OFFSET = 0.0762f; // three inches | 302 | static const float CONTROLLER_X_OFFSET = 0.0381f; // sideways |
| 303 | static const glm::vec3 CONTROLLER_OFFSET = glm::vec3(CONTROLLER_LENGTH_OFFSET / 2.0f, | 303 | static const float CONTROLLER_Y_OFFSET = 0.0495f; // forwards |
| 304 | CONTROLLER_LENGTH_OFFSET / 2.0f, | 304 | static const float CONTROLLER_Z_OFFSET = 0.1371f; // upwards |
| 305 | CONTROLLER_LENGTH_OFFSET * 2.0f); | 305 | static const glm::vec3 CONTROLLER_OFFSET(CONTROLLER_X_OFFSET, CONTROLLER_Y_OFFSET, CONTROLLER_Z_OFFSET); |
| 306 | |||
| 306 | static const glm::vec3 leftTranslationOffset = glm::vec3(-1.0f, 1.0f, 1.0f) * CONTROLLER_OFFSET; | 307 | static const glm::vec3 leftTranslationOffset = glm::vec3(-1.0f, 1.0f, 1.0f) * CONTROLLER_OFFSET; |
| 307 | static const glm::vec3 rightTranslationOffset = CONTROLLER_OFFSET; | 308 | static const glm::vec3 rightTranslationOffset = CONTROLLER_OFFSET; |
| 308 | 309 | ||
| @@ -111,7 +111,7 @@ var NEAR_GRABBING_KINEMATIC = true; // force objects to be kinematic when near-g · 110 unmodified lines | |||
| 111 | var CHECK_TOO_FAR_UNEQUIP_TIME = 0.3; // seconds, duration between checks | 111 | var CHECK_TOO_FAR_UNEQUIP_TIME = 0.3; // seconds, duration between checks |
| 112 | 112 | ||
| 113 | 113 | ||
| 114 | var GRAB_POINT_SPHERE_RADIUS = NEAR_GRAB_RADIUS; | 114 | var GRAB_POINT_SPHERE_RADIUS = NEAR_GRAB_RADIUS * 1.5; |
| 115 | var GRAB_POINT_SPHERE_COLOR = { red: 240, green: 240, blue: 240 }; | 115 | var GRAB_POINT_SPHERE_COLOR = { red: 240, green: 240, blue: 240 }; |
| 116 | var GRAB_POINT_SPHERE_ALPHA = 0.85; | 116 | var GRAB_POINT_SPHERE_ALPHA = 0.85; |
| 117 | 117 | ||
| @@ -21,7 +21,7 @@ getGrabCommunications = function getFarGrabCommunications() { · 20 unmodified lines | |||
| 21 | // var GRAB_POINT_SPHERE_OFFSET = { x: 0.1, y: 0.32, z: 0.04 }; | 21 | // var GRAB_POINT_SPHERE_OFFSET = { x: 0.1, y: 0.32, z: 0.04 }; |
| 22 | 22 | ||
| 23 | // this offset needs to match the one in libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp | 23 | // this offset needs to match the one in libraries/display-plugins/src/display-plugins/hmd/HmdDisplayPlugin.cpp |
| 24 | var GRAB_POINT_SPHERE_OFFSET = { x: 0.0, y: 0.175, z: 0.0 }; | 24 | var GRAB_POINT_SPHERE_OFFSET = { x: 0.075, y: 0.175, z: 0.039 }; // x = upward, y = forward, z = inward |
| 25 | 25 | ||
| 26 | getGrabPointSphereOffset = function(handController) { | 26 | getGrabPointSphereOffset = function(handController) { |
| 27 | if (handController === Controller.Standard.RightHand) { | 27 | if (handController === Controller.Standard.RightHand) { |