Skip to content
Snippets Groups Projects
Commit c0492e54 authored by andreykproductengine's avatar andreykproductengine
Browse files

MAINT-989 Velocity and acceleration should take time into account

parent 6ccdc349
No related branches found
No related tags found
No related merge requests found
...@@ -171,8 +171,8 @@ class LLPhysicsMotion ...@@ -171,8 +171,8 @@ class LLPhysicsMotion
F32 behavior_maxeffect); F32 behavior_maxeffect);
F32 toLocal(const LLVector3 &world); F32 toLocal(const LLVector3 &world);
F32 calculateVelocity_local(); F32 calculateVelocity_local(const F32 time_delta);
F32 calculateAcceleration_local(F32 velocity_local); F32 calculateAcceleration_local(F32 velocity_local, const F32 time_delta);
private: private:
const std::string mParamDriverName; const std::string mParamDriverName;
const std::string mParamControllerName; const std::string mParamControllerName;
...@@ -425,23 +425,22 @@ F32 LLPhysicsMotion::toLocal(const LLVector3 &world) ...@@ -425,23 +425,22 @@ F32 LLPhysicsMotion::toLocal(const LLVector3 &world)
return world * dir_world; return world * dir_world;
} }
F32 LLPhysicsMotion::calculateVelocity_local() F32 LLPhysicsMotion::calculateVelocity_local(const F32 time_delta)
{ {
const F32 world_to_model_scale = 100.0f; const F32 world_to_model_scale = 100.0f;
LLJoint *joint = mJointState->getJoint(); LLJoint *joint = mJointState->getJoint();
const LLVector3 position_world = joint->getWorldPosition(); const LLVector3 position_world = joint->getWorldPosition();
const LLVector3 last_position_world = mPosition_world; const LLVector3 last_position_world = mPosition_world;
const LLVector3 positionchange_world = (position_world-last_position_world) * world_to_model_scale; const LLVector3 positionchange_world = (position_world-last_position_world) * world_to_model_scale;
const LLVector3 velocity_world = positionchange_world; const F32 velocity_local = toLocal(positionchange_world) / time_delta;
const F32 velocity_local = toLocal(velocity_world);
return velocity_local; return velocity_local;
} }
F32 LLPhysicsMotion::calculateAcceleration_local(const F32 velocity_local) F32 LLPhysicsMotion::calculateAcceleration_local(const F32 velocity_local, const F32 time_delta)
{ {
// const F32 smoothing = getParamValue("Smoothing"); // const F32 smoothing = getParamValue("Smoothing");
static const F32 smoothing = 3.0f; // Removed smoothing param since it's probably not necessary static const F32 smoothing = 3.0f; // Removed smoothing param since it's probably not necessary
const F32 acceleration_local = velocity_local - mVelocityJoint_local; const F32 acceleration_local = (velocity_local - mVelocityJoint_local) / time_delta;
const F32 smoothed_acceleration_local = const F32 smoothed_acceleration_local =
acceleration_local * 1.0/smoothing + acceleration_local * 1.0/smoothing +
...@@ -544,9 +543,9 @@ BOOL LLPhysicsMotion::onUpdate(F32 time) ...@@ -544,9 +543,9 @@ BOOL LLPhysicsMotion::onUpdate(F32 time)
// Calculate velocity and acceleration in parameter space. // Calculate velocity and acceleration in parameter space.
// //
//const F32 velocity_joint_local = calculateVelocity_local(time_iteration_step); const F32 joint_local_factor = 30.0;
const F32 velocity_joint_local = calculateVelocity_local(); const F32 velocity_joint_local = calculateVelocity_local(time_delta * joint_local_factor);
const F32 acceleration_joint_local = calculateAcceleration_local(velocity_joint_local); const F32 acceleration_joint_local = calculateAcceleration_local(velocity_joint_local, time_delta * joint_local_factor);
// //
// End velocity and acceleration // End velocity and acceleration
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment