mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-13 02:25:45 +02:00
measure velocity over 6 frames
This commit is contained in:
parent
c034879b74
commit
53a366d4e8
2 changed files with 19 additions and 8 deletions
|
@ -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));
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue