smooth hold action velocity over 2 frames

This commit is contained in:
Seth Alves 2015-11-05 15:07:00 -08:00
parent 29ce1d50ae
commit 28d4d29bb6
2 changed files with 8 additions and 1 deletions

View file

@ -107,8 +107,12 @@ void AvatarActionHold::doKinematicUpdate(float deltaTimeStep) {
withWriteLock([&]{ withWriteLock([&]{
if (_kinematicSetVelocity) { if (_kinematicSetVelocity) {
if (_previousSet) { if (_previousSet) {
glm::vec3 positionalVelocity = (_positionalTarget - _previousPositionalTarget) / deltaTimeStep; // smooth velocity over 2 frames
glm::vec3 positionalDelta = _positionalTarget - _previousPositionalTarget;
glm::vec3 positionalVelocity = (positionalDelta + previousPositionalDelta) / (deltaTimeStep + previousDeltaTimeStep);
rigidBody->setLinearVelocity(glmToBullet(positionalVelocity)); rigidBody->setLinearVelocity(glmToBullet(positionalVelocity));
previousPositionalDelta = positionalDelta;
previousDeltaTimeStep = deltaTimeStep;
} }
} }

View file

@ -46,6 +46,9 @@ private:
bool _previousSet { false }; bool _previousSet { false };
glm::vec3 _previousPositionalTarget; glm::vec3 _previousPositionalTarget;
glm::quat _previousRotationalTarget; glm::quat _previousRotationalTarget;
float previousDeltaTimeStep = 0.0f;
glm::vec3 previousPositionalDelta;
}; };
#endif // hifi_AvatarActionHold_h #endif // hifi_AvatarActionHold_h