more work on getting head routed through input system

This commit is contained in:
Seth Alves 2017-05-30 17:11:56 -07:00
parent ffe844a8e7
commit 2ad85c158a
2 changed files with 38 additions and 8 deletions

View file

@ -230,14 +230,14 @@ void OculusControllerManager::TouchDevice::update(float deltaTime, const control
_lastControllerPose[controller] = tracking.HandPoses[hand]; _lastControllerPose[controller] = tracking.HandPoses[hand];
return; return;
} }
if (_lostTracking[controller]) { if (_lostTracking[controller]) {
if (currentTime > _regainTrackingDeadline[controller]) { if (currentTime > _regainTrackingDeadline[controller]) {
_poseStateMap.erase(controller); _poseStateMap.erase(controller);
_poseStateMap[controller].valid = false; _poseStateMap[controller].valid = false;
return; return;
} }
} else { } else {
quint64 deadlineToRegainTracking = currentTime + LOST_TRACKING_DELAY; quint64 deadlineToRegainTracking = currentTime + LOST_TRACKING_DELAY;
_regainTrackingDeadline[controller] = deadlineToRegainTracking; _regainTrackingDeadline[controller] = deadlineToRegainTracking;
@ -245,6 +245,10 @@ void OculusControllerManager::TouchDevice::update(float deltaTime, const control
} }
handleRotationForUntrackedHand(inputCalibrationData, hand, tracking.HandPoses[hand]); handleRotationForUntrackedHand(inputCalibrationData, hand, tracking.HandPoses[hand]);
}); });
_poseStateMap.erase(controller::HEAD);
handleHeadPose(deltaTime, inputCalibrationData, tracking.HeadPose);
using namespace controller; using namespace controller;
// Axes // Axes
const auto& inputState = _parent._inputState; const auto& inputState = _parent._inputState;
@ -269,7 +273,7 @@ void OculusControllerManager::TouchDevice::update(float deltaTime, const control
if (inputState.Touches & pair.first) { if (inputState.Touches & pair.first) {
_buttonPressedMap.insert(pair.second); _buttonPressedMap.insert(pair.second);
} }
} }
// Haptics // Haptics
{ {
@ -292,16 +296,36 @@ void OculusControllerManager::TouchDevice::focusOutEvent() {
_buttonPressedMap.clear(); _buttonPressedMap.clear();
}; };
void OculusControllerManager::TouchDevice::handlePose(float deltaTime, void OculusControllerManager::TouchDevice::handlePose(float deltaTime,
const controller::InputCalibrationData& inputCalibrationData, ovrHandType hand, const controller::InputCalibrationData& inputCalibrationData,
const ovrPoseStatef& handPose) { ovrHandType hand, const ovrPoseStatef& handPose) {
auto poseId = hand == ovrHand_Left ? controller::LEFT_HAND : controller::RIGHT_HAND; auto poseId = hand == ovrHand_Left ? controller::LEFT_HAND : controller::RIGHT_HAND;
auto& pose = _poseStateMap[poseId]; auto& pose = _poseStateMap[poseId];
pose = ovrControllerPoseToHandPose(hand, handPose); pose = ovrControllerPoseToHandPose(hand, handPose);
// transform into avatar frame // transform into avatar frame
glm::mat4 controllerToAvatar = glm::inverse(inputCalibrationData.avatarMat) * inputCalibrationData.sensorToWorldMat; glm::mat4 controllerToAvatar = glm::inverse(inputCalibrationData.avatarMat) * inputCalibrationData.sensorToWorldMat;
pose = pose.transform(controllerToAvatar); pose = pose.transform(controllerToAvatar);
}
void OculusControllerManager::TouchDevice::handleHeadPose(float deltaTime,
const controller::InputCalibrationData& inputCalibrationData,
const ovrPoseStatef& headPose) {
auto poseId = controller::HEAD;
auto& pose = _poseStateMap[poseId];
pose.translation = toGlm(headPose.ThePose.Position);
pose.rotation = toGlm(headPose.ThePose.Orientation);
pose.angularVelocity = toGlm(headPose.AngularVelocity);
pose.velocity = toGlm(headPose.LinearVelocity);
pose.valid = true;
qDebug() << "handleHeadPose" << pose.translation.x << pose.translation.y << pose.translation.z;
// transform into avatar frame
glm::mat4 controllerToAvatar = glm::inverse(inputCalibrationData.avatarMat) * inputCalibrationData.sensorToWorldMat;
pose = pose.transform(controllerToAvatar);
qDebug() << "handleHeadPose after" << pose.translation.x << pose.translation.y << pose.translation.z;
} }
void OculusControllerManager::TouchDevice::handleRotationForUntrackedHand(const controller::InputCalibrationData& inputCalibrationData, void OculusControllerManager::TouchDevice::handleRotationForUntrackedHand(const controller::InputCalibrationData& inputCalibrationData,
@ -382,6 +406,7 @@ controller::Input::NamedVector OculusControllerManager::TouchDevice::getAvailabl
makePair(LEFT_HAND, "LeftHand"), makePair(LEFT_HAND, "LeftHand"),
makePair(RIGHT_HAND, "RightHand"), makePair(RIGHT_HAND, "RightHand"),
makePair(HEAD, "Head"),
makePair(LEFT_PRIMARY_THUMB_TOUCH, "LeftPrimaryThumbTouch"), makePair(LEFT_PRIMARY_THUMB_TOUCH, "LeftPrimaryThumbTouch"),
makePair(LEFT_SECONDARY_THUMB_TOUCH, "LeftSecondaryThumbTouch"), makePair(LEFT_SECONDARY_THUMB_TOUCH, "LeftSecondaryThumbTouch"),

View file

@ -76,8 +76,13 @@ private:
private: private:
void stopHapticPulse(bool leftHand); void stopHapticPulse(bool leftHand);
void handlePose(float deltaTime, const controller::InputCalibrationData& inputCalibrationData, ovrHandType hand, const ovrPoseStatef& handPose); void handlePose(float deltaTime, const controller::InputCalibrationData& inputCalibrationData,
void handleRotationForUntrackedHand(const controller::InputCalibrationData& inputCalibrationData, ovrHandType hand, const ovrPoseStatef& handPose); ovrHandType hand, const ovrPoseStatef& handPose);
void handleRotationForUntrackedHand(const controller::InputCalibrationData& inputCalibrationData,
ovrHandType hand, const ovrPoseStatef& handPose);
void handleHeadPose(float deltaTime, const controller::InputCalibrationData& inputCalibrationData,
const ovrPoseStatef& headPose);
int _trackedControllers { 0 }; int _trackedControllers { 0 };
// perform an action when the TouchDevice mutex is acquired. // perform an action when the TouchDevice mutex is acquired.