关于粒子特效的一篇文章:用JavaScript玩转游戏物http://理(一)运动学模拟与粒子系统
这里有一篇Flash与HTML 5 WebGL粒子系统性能比较的实验数据:
粒子特效demo一:
DEMO二:
在threeJS里有很多粒子特效的demos,
1、首先,可以以设置单个例子的样式,可以通过createRadialGradient(xStart,yStart,radiusStart,xEnd,yEnd,radiusEnd)来设置一个颜色渐变的粒子。
createRadialGradient(xStart,yStart,radiusStart,xEnd,yEnd,radiusEnd)
在experimental-webgl,上下文环境中没有,createRadialGradient(xStart,yStart,radiusStart,xEnd,yEnd,radiusEnd)这个方法,
这个方法的作用是:创建一条放射颜色渐变
它的几个参数分别代表:
xStart,yStart:开始圆的圆心心坐标
radiusStart:开始圆的直径
xEnd,yEnd:结束圆的圆心坐标
radiusEnd:结束圆的直径
描述
这个方法创建并返回一个新的CanvasGradient对象,该对象在两个指定圆的圆周之间放射性地插值颜色。使用返回对象的addColorStop()方法坐到这一点。要使用一个渐变来
勾勒线变或填充区域,只需要把CanvasGradient对象赋给stokeStyle属性或fillStyle属性即可。
放射性渐变的绘制方法
使用第一个圆的圆周在偏移0处的颜色和第二个圆的圆周在偏移1处的颜色,在两个位置之间的圆上插入颜色值(红色,绿色,蓝色和alpha).
效果如:http://jsfiddle.net/naooomi/h3MXY/
http://jsfiddle.net/naooomi/E2z5e/
2、Tween.js for Smooth Animation,在threeJS的官网,你可以下载Tween.js的源代码
https://github.com/sole/tween.js
tween.js is a "super simple,fast and easy to use tweening enging" from sole.
Tweening是什么?
wikepedia article 上说,tweening的另一种说法是插画,(即关键帧中间的动画帧)。它即时source到target之间的插值。可以看这里:
Tweening分别有以下几个效果:
Linear:无缓动效果
Quadratic:二次方的缓动
Cubic:三次方的缓动
Quartic:四次方的缓动
Quintic:五次方的缓动
Sinusoidal:正xuan正弦曲线的缓动(sin(t)
Exponential:指数曲线的缓动(2^t);
Circular:圆形曲线的缓动(sqrt(1-t^2))
Elastic:指数衰减的正弦曲线缓动
Back:超过范围的三次方缓动((s+1)*t^3 - s*t^2)
Bounce:指数衰减的反弹缓动。
每个效果部分三个缓动方式,分别是:
easeIn:从0开始加速的缓动;
easeOut:减速到0的缓动;
easeInOut:前半段从0开始加速,后半段减速到0的缓动。
其中Linear是无缓动效果,没有以上效果。
现在创建一个Tween
首先,我们设置一个position和target,position会被不停地更新,直到position的值和target的值相等。
var position={x:0,y:300};
var position={x:400,y:50};
然后,我们在创建一个物体。
var tween=new Tween.Tween(position).to(target.2000);
注意到,后面的2000没有,它的意思是从position,到tartet需要2秒。现在tween就可以在两秒的时间里使position.x从0到400,position.y从300到50了。为了是3D的物体移动,我们需要update()。
tween.delay(500),可以实现退出500毫秒执行。
Chainiing Tweens for Animation
通过chain(),我们可以让物体来回不停的滚动。假如,我们已经有了tweenHead 和tweenBack
//after tweenHead,do tweenBack
tweenHead.chain(tweenBack);
//And after tweenBack, do tweenHead,so it is cycling
tweenBack.chain(tweenHead);
You can get a play with the parameters of the example or look at its annotated code.