弹性表达式总结


·Bounce 理解为“反弹”,如 皮球落地反弹的效果;

e = .7;

g = 5000;

nMax = 9;

n = 0;

if (numKeys > 0){

n = nearestKey(time).index;

if (key(n).time > time) n--;

}

if (n > 0){

t = time - key(n).time;

v = -velocityAtTime(key(n).time - .001)*e;

vl = length(v);

if (value instanceof Array){

vu = (vl > 0) ? normalize(v) : [0,0,0];

}else{

vu = (v < 0) ? -1 : 1;

}

tCur = 0;

segDur = 2*vl/g;

tNext = segDur;

nb = 1; // number of bounces

while (tNext < t && nb <= nMax){

vl *= e;

segDur *= e;

tCur = tNext;

tNext += segDur;

nb++

}

if(nb <= nMax){

delta = t - tCur;

value +  vu*delta*(vl - g*delta/2);

}else{

value

}

}else  value



·Overshoot(过冲、夸张的)理解为“抖动”,如 果冻抖动的效果。

Keyframe Overshoot

freq = 3;

decay = 5;

n = 0;

if (numKeys > 0){

n = nearestKey(time).index;

if (key(n).time > time) n--;

}

if (n > 0){

t = time - key(n).time;

amp = velocityAtTime(key(n).time - .001);

w = freq*Math.PI*2;

value + amp*(Math.sin(t*w)/Math.exp(decay*t)/w);

}else

value

几个要点

1、关键帧的速度值及表达式中的频率(freq)、衰减(decay)共同来控制的。

2、想要表达式正常工作,就要给最后一个关键帧一个速度值,最后一个关键帧的速度值将会很大程度的影响表达式的抖动效果。当感觉抖动效果不明显时,也可以试试改变一下关键帧速率。最后一帧的速度越大抖动效果越明显。


3、给表达式显示范围


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.运动回弹 Keyframe Overshoot: freq=3;decay=5;n=0;if(numKeys>...
    lorin_r阅读 5,643评论 0 50
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,768评论 0 33
  • 在2013年的夏天,那个夏天还和往常一样燥热一样普通。男孩和女孩通过别人介绍得以认识,男孩183的个子眉目比较清秀...
  • 已经是夜晚十分了,昏暗的灯光蒙了一层雾气,那些树影,像鬼爪一样延向远方,仿佛在指着某条路,仿佛要在黑暗里抓住那些凌...
    夜枝阅读 223评论 0 0
  • 170328VIP个案总结报告: 揭示了人类出生和星象的关系,解释了从受孕、怀胎到出生整个孕育过程,空间、时间及星...
    Starsecret阅读 565评论 0 0