mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 19:56:44 +02:00
Smooth hips transition between idle and fly.
Also, take dt into account for the critically damped spring lerp calculation.
This commit is contained in:
parent
c3d1daf855
commit
558711f906
1 changed files with 12 additions and 6 deletions
|
@ -192,14 +192,20 @@ void MySkeletonModel::updateRig(float deltaTime, glm::mat4 parentTransform) {
|
||||||
|
|
||||||
AnimPose hips = computeHipsInSensorFrame(myAvatar, isFlying);
|
AnimPose hips = computeHipsInSensorFrame(myAvatar, isFlying);
|
||||||
|
|
||||||
|
// timescale in seconds
|
||||||
|
const float TRANS_HORIZ_TIMESCALE = 0.25f;
|
||||||
|
const float TRANS_VERT_TIMESCALE = 0.01f; // We want the vertical component of the hips to follow quickly to prevent spine squash/stretch.
|
||||||
|
const float ROT_TIMESCALE = 0.15f;
|
||||||
|
|
||||||
|
float transHorizAlpha = glm::min(deltaTime / TRANS_HORIZ_TIMESCALE, 1.0f);
|
||||||
|
float transVertAlpha = glm::min(deltaTime / TRANS_VERT_TIMESCALE, 1.0f);
|
||||||
|
float rotAlpha = glm::min(deltaTime / ROT_TIMESCALE, 1.0f);
|
||||||
|
|
||||||
// smootly lerp hips, in sensorframe, with different coeff for horiz and vertical translation.
|
// smootly lerp hips, in sensorframe, with different coeff for horiz and vertical translation.
|
||||||
const float ROT_ALPHA = 0.9f;
|
|
||||||
const float TRANS_HORIZ_ALPHA = 0.9f;
|
|
||||||
const float TRANS_VERT_ALPHA = 0.1f;
|
|
||||||
float hipsY = hips.trans().y;
|
float hipsY = hips.trans().y;
|
||||||
hips.trans() = lerp(hips.trans(), _prevHips.trans(), TRANS_HORIZ_ALPHA);
|
hips.trans() = lerp(_prevHips.trans(), hips.trans(), transHorizAlpha);
|
||||||
hips.trans().y = lerp(hipsY, _prevHips.trans().y, TRANS_VERT_ALPHA);
|
hips.trans().y = lerp(_prevHips.trans().y, hipsY, transVertAlpha);
|
||||||
hips.rot() = safeLerp(hips.rot(), _prevHips.rot(), ROT_ALPHA);
|
hips.rot() = safeLerp(_prevHips.rot(), hips.rot(), rotAlpha);
|
||||||
|
|
||||||
_prevHips = hips;
|
_prevHips = hips;
|
||||||
_prevHipsValid = true;
|
_prevHipsValid = true;
|
||||||
|
|
Loading…
Reference in a new issue