fixed hand calibration

This commit is contained in:
Dante Ruiz 2017-06-17 00:37:33 +01:00
parent 07102cc98d
commit 2015f059c7
2 changed files with 13 additions and 12 deletions

View file

@ -768,6 +768,6 @@ Rectangle {
function sendConfigurationSettings() { function sendConfigurationSettings() {
var settings = composeConfigurationSettings(); var settings = composeConfigurationSettings();
InputConfiguration.setConfigurationSettings(settings, pluginName); InputConfiguration.setConfigurationSettings(settings, pluginName);
updateCalibrationText(); //updateCalibrationText();
} }
} }

View file

@ -330,19 +330,22 @@ void ViveControllerManager::InputDevice::configureCalibrationSettings(const QJso
auto iter = configurationSettings.begin(); auto iter = configurationSettings.begin();
auto end = configurationSettings.end(); auto end = configurationSettings.end();
while (iter != end) { while (iter != end) {
if (iter.key() == "trackerConfiguration") { if (iter.key() == "bodyConfiguration") {
setConfigFromString(iter.value().toString()); setConfigFromString(iter.value().toString());
} else if (iter.key() == "overrideHead") { } else if (iter.key() == "headConfiguration") {
bool overrideHead = iter.value().toBool(); QJsonObject headObject = iter.value().toObject();
bool overrideHead = headObject["override"].toBool();
if (overrideHead) { if (overrideHead) {
_headConfig = HeadConfig::Puck; _headConfig = HeadConfig::Puck;
} else { } else {
_headConfig = HeadConfig::HMD; _headConfig = HeadConfig::HMD;
} }
} else if (iter.key() == "overrideHandController") { } else if (iter.key() == "handConfiguration") {
bool overrideHands = iter.value().toBool(); QJsonObject handsObject = iter.value().toObject();
bool overrideHands = handsObject["override"].toBool();
if (overrideHands) { if (overrideHands) {
_handConfig = HandConfig::Pucks; _handConfig = HandConfig::Pucks;
qDebug() << "--------> configure hands <---------";
} else { } else {
_handConfig = HandConfig::HandController; _handConfig = HandConfig::HandController;
} }
@ -876,8 +879,7 @@ void ViveControllerManager::InputDevice::calibrateLeftHand(glm::mat4& defaultToR
glm::mat4 handPoseAvatarMat = createMatFromQuatAndPos(handPose.getRotation(), handPose.getTranslation()); glm::mat4 handPoseAvatarMat = createMatFromQuatAndPos(handPose.getRotation(), handPose.getTranslation());
glm::vec3 handPoseTranslation = extractTranslation(handPoseAvatarMat); glm::vec3 handPoseTranslation = extractTranslation(handPoseAvatarMat);
glm::vec3 handPoseZAxis = glmExtractRotation(handPoseAvatarMat) * glm::vec3(0.0f, 0.0f, 1.0f); glm::vec3 handPoseZAxis = glmExtractRotation(handPoseAvatarMat) * glm::vec3(0.0f, 0.0f, 1.0f);
glm::vec3 avatarHandYAxis = transformVectorFast(glm::inverse(handPoseAvatarMat), glm::vec3(1.0f, 0.0f, 0.0f)); glm::vec3 avatarHandYAxis = transformVectorFast(inputCalibration.defaultLeftHand, glm::vec3(0.0f, 1.0f, 0.0f));
const float EPSILON = 1.0e-4f; const float EPSILON = 1.0e-4f;
if (fabsf(fabsf(glm::dot(glm::normalize(avatarHandYAxis), glm::normalize(handPoseZAxis))) - 1.0f) < EPSILON) { if (fabsf(fabsf(glm::dot(glm::normalize(avatarHandYAxis), glm::normalize(handPoseZAxis))) - 1.0f) < EPSILON) {
handPoseZAxis = glm::vec3(0.0f, 0.0f, 1.0f); handPoseZAxis = glm::vec3(0.0f, 0.0f, 1.0f);
@ -891,7 +893,7 @@ void ViveControllerManager::InputDevice::calibrateLeftHand(glm::mat4& defaultToR
glm::vec4(zPrime, 0.0f), glm::vec4(0.0f, 0.0f, 0.0f, 1.0f)); glm::vec4(zPrime, 0.0f), glm::vec4(0.0f, 0.0f, 0.0f, 1.0f));
glm::vec3 translationOffset = glm::vec3(0.0f, HAND_PUCK_Y_OFFSET, HAND_PUCK_Z_OFFSET); glm::vec3 translationOffset = glm::vec3(0.0f, -HAND_PUCK_Y_OFFSET, 0.0f);
glm::quat initialRotation = glmExtractRotation(handPoseAvatarMat); glm::quat initialRotation = glmExtractRotation(handPoseAvatarMat);
glm::quat finalRotation = glmExtractRotation(newHandMat); glm::quat finalRotation = glmExtractRotation(newHandMat);
@ -908,8 +910,7 @@ void ViveControllerManager::InputDevice::calibrateRightHand(glm::mat4& defaultTo
glm::mat4 handPoseAvatarMat = createMatFromQuatAndPos(handPose.getRotation(), handPose.getTranslation()); glm::mat4 handPoseAvatarMat = createMatFromQuatAndPos(handPose.getRotation(), handPose.getTranslation());
glm::vec3 handPoseTranslation = extractTranslation(handPoseAvatarMat); glm::vec3 handPoseTranslation = extractTranslation(handPoseAvatarMat);
glm::vec3 handPoseZAxis = glmExtractRotation(handPoseAvatarMat) * glm::vec3(0.0f, 0.0f, 1.0f); glm::vec3 handPoseZAxis = glmExtractRotation(handPoseAvatarMat) * glm::vec3(0.0f, 0.0f, 1.0f);
glm::vec3 avatarHandYAxis = transformVectorFast(glm::inverse(handPoseAvatarMat), glm::vec3(1.0f, 0.0f, 0.0f)); glm::vec3 avatarHandYAxis = transformVectorFast(inputCalibration.defaultRightHand, glm::vec3(0.0f, 1.0f, 0.0f));
const float EPSILON = 1.0e-4f; const float EPSILON = 1.0e-4f;
if (fabsf(fabsf(glm::dot(glm::normalize(avatarHandYAxis), glm::normalize(handPoseZAxis))) - 1.0f) < EPSILON) { if (fabsf(fabsf(glm::dot(glm::normalize(avatarHandYAxis), glm::normalize(handPoseZAxis))) - 1.0f) < EPSILON) {
handPoseZAxis = glm::vec3(0.0f, 0.0f, 1.0f); handPoseZAxis = glm::vec3(0.0f, 0.0f, 1.0f);
@ -924,7 +925,7 @@ void ViveControllerManager::InputDevice::calibrateRightHand(glm::mat4& defaultTo
glm::vec3 translationOffset = glm::vec3(0.0f, HAND_PUCK_Y_OFFSET, HAND_PUCK_Z_OFFSET); glm::vec3 translationOffset = glm::vec3(0.0f, 0.0f, 0.0f);
glm::quat initialRotation = glmExtractRotation(handPoseAvatarMat); glm::quat initialRotation = glmExtractRotation(handPoseAvatarMat);
glm::quat finalRotation = glmExtractRotation(newHandMat); glm::quat finalRotation = glmExtractRotation(newHandMat);