Exponential relaxation

This commit is contained in:
Atlante45 2015-02-27 15:33:24 +01:00
parent 5a556a06d2
commit 9849efe013
2 changed files with 8 additions and 6 deletions

View file

@ -16,8 +16,7 @@ inline float FaceTracker::getBlendshapeCoefficient(int index) const {
}
float FaceTracker::getFadeCoefficient() const {
// TODO: apply exponential relaxation
return _relaxationStatus;
return _fadeCoefficient;
}
const glm::vec3 FaceTracker::getHeadTranslation() const {
@ -29,18 +28,20 @@ const glm::quat FaceTracker::getHeadRotation() const {
}
void FaceTracker::update(float deltaTime) {
static const float RELAXATION_TIME = 0.4; // sec
static const float RELAXATION_TIME = 1.0f; // sec
static const float LAMBDA = 1.5;
if (isTracking()) {
if (_relaxationStatus == 1.0f) {
return;
}
_relaxationStatus += deltaTime / RELAXATION_TIME;
_relaxationStatus = glm::clamp(_relaxationStatus + deltaTime / RELAXATION_TIME, 0.0f, 1.0f);
_fadeCoefficient = std::exp(-LAMBDA * _relaxationStatus);
} else {
if (_relaxationStatus == 0.0f) {
return;
}
_relaxationStatus -= deltaTime / RELAXATION_TIME;
_relaxationStatus = glm::clamp(_relaxationStatus - deltaTime / RELAXATION_TIME, 0.0f, 1.0f);
_fadeCoefficient = 1.0f - std::exp(-LAMBDA * (1.0f - _relaxationStatus));
}
_relaxationStatus = glm::clamp(_relaxationStatus, 0.0f, 1.0f);
}

View file

@ -51,6 +51,7 @@ protected:
QVector<float> _blendshapeCoefficients;
float _relaxationStatus = 0.0f; // Between 0.0f and 1.0f
float _fadeCoefficient = 0.0f; // Between 0.0f and 1.0f
};
#endif // hifi_FaceTracker_h