mirror of
https://github.com/overte-org/overte.git
synced 2025-06-22 22:40:32 +02:00
Merge pull request #10793 from druiz17/wide-stance-fix
MoCap wide stance fix for calibration
This commit is contained in:
commit
59e72470f3
2 changed files with 27 additions and 8 deletions
|
@ -959,15 +959,33 @@ void ViveControllerManager::InputDevice::calibrateFeet(glm::mat4& defaultToRefer
|
||||||
controller::Pose& secondFootPose = secondFoot.second;
|
controller::Pose& secondFootPose = secondFoot.second;
|
||||||
|
|
||||||
if (determineLimbOrdering(firstFootPose, secondFootPose, headXAxis, headPosition)) {
|
if (determineLimbOrdering(firstFootPose, secondFootPose, headXAxis, headPosition)) {
|
||||||
_jointToPuckMap[controller::LEFT_FOOT] = firstFoot.first;
|
calibrateFoot(defaultToReferenceMat, inputCalibration, firstFoot, true);
|
||||||
_pucksOffset[firstFoot.first] = computeOffset(defaultToReferenceMat, inputCalibration.defaultLeftFoot, firstFootPose);
|
calibrateFoot(defaultToReferenceMat, inputCalibration, secondFoot, false);
|
||||||
_jointToPuckMap[controller::RIGHT_FOOT] = secondFoot.first;
|
|
||||||
_pucksOffset[secondFoot.first] = computeOffset(defaultToReferenceMat, inputCalibration.defaultRightFoot, secondFootPose);
|
|
||||||
} else {
|
} else {
|
||||||
_jointToPuckMap[controller::LEFT_FOOT] = secondFoot.first;
|
calibrateFoot(defaultToReferenceMat, inputCalibration, secondFoot, true);
|
||||||
_pucksOffset[secondFoot.first] = computeOffset(defaultToReferenceMat, inputCalibration.defaultLeftFoot, secondFootPose);
|
calibrateFoot(defaultToReferenceMat, inputCalibration, firstFoot, false);
|
||||||
_jointToPuckMap[controller::RIGHT_FOOT] = firstFoot.first;
|
}
|
||||||
_pucksOffset[firstFoot.first] = computeOffset(defaultToReferenceMat, inputCalibration.defaultRightFoot, firstFootPose);
|
}
|
||||||
|
|
||||||
|
void ViveControllerManager::InputDevice::calibrateFoot(glm::mat4& defaultToReferenceMat, const controller::InputCalibrationData& inputCalibration, PuckPosePair& footPair, bool isLeftFoot){
|
||||||
|
controller::Pose footPose = footPair.second;
|
||||||
|
glm::mat4 puckPoseAvatarMat = createMatFromQuatAndPos(footPose.getRotation(), footPose.getTranslation());
|
||||||
|
glm::mat4 defaultFoot = isLeftFoot ? inputCalibration.defaultLeftFoot : inputCalibration.defaultRightFoot;
|
||||||
|
glm::mat4 footOffset = computeOffset(defaultToReferenceMat, defaultFoot, footPose);
|
||||||
|
|
||||||
|
glm::quat rotationOffset = glmExtractRotation(footOffset);
|
||||||
|
glm::vec3 translationOffset = extractTranslation(footOffset);
|
||||||
|
glm::vec3 avatarXAxisInPuckFrame = glm::normalize(transformVectorFast(glm::inverse(puckPoseAvatarMat), glm::vec3(-1.0f, 0.0f, 0.0f)));
|
||||||
|
float distance = glm::dot(translationOffset, avatarXAxisInPuckFrame);
|
||||||
|
glm::vec3 finalTranslation = translationOffset - (distance * avatarXAxisInPuckFrame);
|
||||||
|
glm::mat4 finalOffset = createMatFromQuatAndPos(rotationOffset, finalTranslation);
|
||||||
|
|
||||||
|
if (isLeftFoot) {
|
||||||
|
_jointToPuckMap[controller::LEFT_FOOT] = footPair.first;
|
||||||
|
_pucksOffset[footPair.first] = finalOffset;
|
||||||
|
} else {
|
||||||
|
_jointToPuckMap[controller::RIGHT_FOOT] = footPair.first;
|
||||||
|
_pucksOffset[footPair.first] = finalOffset;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -98,6 +98,7 @@ private:
|
||||||
void calibrateLeftHand(glm::mat4& defaultToReferenceMat, const controller::InputCalibrationData& inputCalibration, PuckPosePair& handPair);
|
void calibrateLeftHand(glm::mat4& defaultToReferenceMat, const controller::InputCalibrationData& inputCalibration, PuckPosePair& handPair);
|
||||||
void calibrateRightHand(glm::mat4& defaultToReferenceMat, const controller::InputCalibrationData& inputCalibration, PuckPosePair& handPair);
|
void calibrateRightHand(glm::mat4& defaultToReferenceMat, const controller::InputCalibrationData& inputCalibration, PuckPosePair& handPair);
|
||||||
void calibrateFeet(glm::mat4& defaultToReferenceMat, const controller::InputCalibrationData& inputCalibration);
|
void calibrateFeet(glm::mat4& defaultToReferenceMat, const controller::InputCalibrationData& inputCalibration);
|
||||||
|
void calibrateFoot(glm::mat4& defaultToReferenceMat, const controller::InputCalibrationData& inputCalibration, PuckPosePair& footPair, bool isLeftFoot);
|
||||||
void calibrateHips(glm::mat4& defaultToReferenceMat, const controller::InputCalibrationData& inputCalibration);
|
void calibrateHips(glm::mat4& defaultToReferenceMat, const controller::InputCalibrationData& inputCalibration);
|
||||||
void calibrateChest(glm::mat4& defaultToReferenceMat, const controller::InputCalibrationData& inputCalibration);
|
void calibrateChest(glm::mat4& defaultToReferenceMat, const controller::InputCalibrationData& inputCalibration);
|
||||||
void calibrateShoulders(glm::mat4& defaultToReferenceMat, const controller::InputCalibrationData& inputCalibration,
|
void calibrateShoulders(glm::mat4& defaultToReferenceMat, const controller::InputCalibrationData& inputCalibration,
|
||||||
|
|
Loading…
Reference in a new issue