mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 18:42:58 +02:00
more work on getting head routed through input system
This commit is contained in:
parent
ffe844a8e7
commit
2ad85c158a
2 changed files with 38 additions and 8 deletions
|
@ -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"),
|
||||||
|
|
|
@ -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.
|
||||||
|
|
Loading…
Reference in a new issue