measure velocity over 6 frames

This commit is contained in:
Seth Alves 2016-07-11 13:25:00 -07:00
parent c034879b74
commit 53a366d4e8
2 changed files with 19 additions and 8 deletions

View file

@ -17,11 +17,14 @@
#include "CharacterController.h"
const uint16_t AvatarActionHold::holdVersion = 1;
const int AvatarActionHold::velocitySmoothFrames = 6;
AvatarActionHold::AvatarActionHold(const QUuid& id, EntityItemPointer ownerEntity) :
ObjectActionSpring(id, ownerEntity)
{
_type = ACTION_TYPE_HOLD;
_measuredLinearVelocities.resize(AvatarActionHold::velocitySmoothFrames);
#if WANT_DEBUG
qDebug() << "AvatarActionHold::AvatarActionHold";
#endif
@ -168,7 +171,7 @@ bool AvatarActionHold::getTarget(float deltaTimeStep, glm::quat& rotation, glm::
position = palmPosition + rotation * _relativePosition;
// update linearVelocity based on offset via _relativePosition;
// linearVelocity = linearVelocity + glm::cross(angularVelocity, position - palmPosition);
linearVelocity = linearVelocity + glm::cross(angularVelocity, position - palmPosition);
});
return true;
@ -205,16 +208,22 @@ void AvatarActionHold::doKinematicUpdate(float deltaTimeStep) {
withWriteLock([&]{
if (_previousSet) {
_measuredLinearVelocity = (_positionalTarget - _previousPositionalTarget) / deltaTimeStep;
qDebug() << _measuredLinearVelocity.x << _measuredLinearVelocity.y << _measuredLinearVelocity.z
<< deltaTimeStep;
} else {
_measuredLinearVelocity = glm::vec3();
glm::vec3 oneFrameVelocity = (_positionalTarget - _previousPositionalTarget) / deltaTimeStep;
_measuredLinearVelocities[_measuredLinearVelocitiesIndex++] = oneFrameVelocity;
if (_measuredLinearVelocitiesIndex >= AvatarActionHold::velocitySmoothFrames) {
_measuredLinearVelocitiesIndex = 0;
}
}
glm::vec3 measuredLinearVelocity;
for (int i = 0; i < AvatarActionHold::velocitySmoothFrames; i++) {
measuredLinearVelocity += _measuredLinearVelocities[i];
}
measuredLinearVelocity /= (float)AvatarActionHold::velocitySmoothFrames;
if (_kinematicSetVelocity) {
// rigidBody->setLinearVelocity(glmToBullet(_linearVelocityTarget));
rigidBody->setLinearVelocity(glmToBullet(_measuredLinearVelocity));
rigidBody->setLinearVelocity(glmToBullet(measuredLinearVelocity));
rigidBody->setAngularVelocity(glmToBullet(_angularVelocityTarget));
}

View file

@ -65,7 +65,9 @@ private:
// leaving this here for future refernece.
// glm::quat _palmRotationFromRigidBody;
glm::vec3 _measuredLinearVelocity;
static const int velocitySmoothFrames;
QVector<glm::vec3> _measuredLinearVelocities;
int _measuredLinearVelocitiesIndex { 0 };
};
#endif // hifi_AvatarActionHold_h