mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-05-29 04:32:33 +02:00
Code review feedback
clamp _rotationConstant and _translationConstante between 0 and 1. re-organized apply structure, to prevent transforming invalid values.
This commit is contained in:
parent
9beb3ac5b6
commit
f0985a8a01
2 changed files with 27 additions and 18 deletions
|
@ -21,27 +21,36 @@ namespace controller {
|
||||||
|
|
||||||
Pose ExponentialSmoothingFilter::apply(Pose value) const {
|
Pose ExponentialSmoothingFilter::apply(Pose value) const {
|
||||||
|
|
||||||
// to perform filtering in sensor space, we need to compute the transformations.
|
if (value.isValid()) {
|
||||||
auto userInputMapper = DependencyManager::get<UserInputMapper>();
|
|
||||||
const InputCalibrationData calibrationData = userInputMapper->getInputCalibrationData();
|
|
||||||
glm::mat4 sensorToAvatarMat = glm::inverse(calibrationData.avatarMat) * calibrationData.sensorToWorldMat;
|
|
||||||
glm::mat4 avatarToSensorMat = glm::inverse(calibrationData.sensorToWorldMat) * calibrationData.avatarMat;
|
|
||||||
|
|
||||||
// transform pose into sensor space.
|
// to perform filtering in sensor space, we need to compute the transformations.
|
||||||
Pose sensorValue = value.transform(avatarToSensorMat);
|
auto userInputMapper = DependencyManager::get<UserInputMapper>();
|
||||||
|
const InputCalibrationData calibrationData = userInputMapper->getInputCalibrationData();
|
||||||
|
glm::mat4 sensorToAvatarMat = glm::inverse(calibrationData.avatarMat) * calibrationData.sensorToWorldMat;
|
||||||
|
glm::mat4 avatarToSensorMat = glm::inverse(calibrationData.sensorToWorldMat) * calibrationData.avatarMat;
|
||||||
|
|
||||||
if (value.isValid() && _oldSensorValue.isValid()) {
|
// transform pose into sensor space.
|
||||||
|
Pose sensorValue = value.transform(avatarToSensorMat);
|
||||||
|
|
||||||
// exponential smoothing filter
|
if (_prevSensorValue.isValid()) {
|
||||||
sensorValue.translation = _translationConstant * sensorValue.getTranslation() + (1.0f - _translationConstant) * _oldSensorValue.getTranslation();
|
// exponential smoothing filter
|
||||||
sensorValue.rotation = safeMix(sensorValue.getRotation(), _oldSensorValue.getRotation(), _rotationConstant);
|
sensorValue.translation = _translationConstant * sensorValue.getTranslation() + (1.0f - _translationConstant) * _prevSensorValue.getTranslation();
|
||||||
|
sensorValue.rotation = safeMix(sensorValue.getRotation(), _prevSensorValue.getRotation(), _rotationConstant);
|
||||||
|
|
||||||
_oldSensorValue = sensorValue;
|
// remember previous sensor space value.
|
||||||
|
_prevSensorValue = sensorValue;
|
||||||
|
|
||||||
// transform back into avatar space
|
// transform back into avatar space
|
||||||
return sensorValue.transform(sensorToAvatarMat);
|
return sensorValue.transform(sensorToAvatarMat);
|
||||||
|
} else {
|
||||||
|
// remember previous sensor space value.
|
||||||
|
_prevSensorValue = sensorValue;
|
||||||
|
|
||||||
|
// no previous value to smooth with, so return value unchanged
|
||||||
|
return value;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
_oldSensorValue = sensorValue;
|
// return invalid value unchanged
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -51,8 +60,8 @@ namespace controller {
|
||||||
if (parameters.isObject()) {
|
if (parameters.isObject()) {
|
||||||
auto obj = parameters.toObject();
|
auto obj = parameters.toObject();
|
||||||
if (obj.contains(JSON_ROTATION) && obj.contains(JSON_TRANSLATION)) {
|
if (obj.contains(JSON_ROTATION) && obj.contains(JSON_TRANSLATION)) {
|
||||||
_rotationConstant = obj[JSON_ROTATION].toDouble();
|
_rotationConstant = glm::clamp((float)obj[JSON_ROTATION].toDouble(), 0.0f, 1.0f);
|
||||||
_translationConstant = obj[JSON_TRANSLATION].toDouble();
|
_translationConstant = glm::clamp((float)obj[JSON_TRANSLATION].toDouble(), 0.0f, 1.0f);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,7 +34,7 @@ namespace controller {
|
||||||
float _translationConstant { 0.375f };
|
float _translationConstant { 0.375f };
|
||||||
float _rotationConstant { 0.375f };
|
float _rotationConstant { 0.375f };
|
||||||
|
|
||||||
mutable Pose _oldSensorValue { Pose() }; // sensor space
|
mutable Pose _prevSensorValue { Pose() }; // sensor space
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue