摘要: 本文通过粒子系统及三维粒子透视投影变换,运用Flash AS2及其开发环境,实现了基本的三维粒子系统。并结合相关的曲线及运动方式,实现了抛体运动,Fermat 螺线上升运动以及龙卷风效果。表现了一定的数字艺术层的美感。 关键词: 粒子系统,三维,数字艺术 1前言: 三维粒子系统是一类令人感到激动又十分有趣的动画程序。它的实现方式主要需要用基于粒子系统构建的图形学,动力学以及数字艺术等多方面的知识。[1]介绍了基本的三维视图通过透视投影变换到二维场景的方式。[2]介绍了一个基本的粒子系统的实现。在这两篇文章的基础上,再结合比较简单的运动学方面的知识,在本文中实现了基本的三维粒子系统,并实现了抛体运动,Fermat 螺线上升运动以及龙卷风效果。这些作品表现了一定的数字艺术层的美感。 另外,开发选用的是基于AS2语言的Flash开发平台,这种开发模式具有以下优点: 1) Flash 播放器具有极高的普及率,而且swf文件格式是跨平台的。 2) Flash 的失量图形处理模式极强,适合网络传播图像,动画及各类互动效果。 3) Flash 平台下的交互动画开发方便,采用了AS2语言可以面向对象的模式来组织程序结构。交互效果可以实现的非常到位。可以说,是一种面像图形开发的脚本语言。(正如Matlab可以说是面向科学工程计算的脚本语言一样。) 当然,这种模式也是有缺点的,比如Flash播放器在处理一些较大运算时的效果不是很 理想。 由于这个程序重点在实现相应的图形效果上,主要是测试之用,所以采用Flash 的 AS2 来进行是非常合适的。 2程序总体思路及关键部分: 2.1粒子系统的框架: [2]中已有叙述,这里简要回顾之:
Initialization while(runFlag) { For all particles { If(current particle is not lived) { Init this particle. } Else if(current particle is out of the showing area) { Current particle set to dead. } } }
2.2三维粒子在二维场景的透视成像: [1]中已有详述,这里简要回顾之: 对于一个在三维场景中的点p(x ,y ,z) 其在距离原点距离为d处的位于z轴正半轴上的点(0,0,d)而言,其对应到二维投影面的点p’ (x’,y’)有如下计算公式:
x’=x/(-z/d+1) y’=y/(-z/d+1)
图1 2.3.1抛体运动模式关键: 抛体运动在这里的右手坐标系(图1)中,是指以y为竖直运方向作上抛运动,x , z方向以固定速度运动的方式。我们在公园里看到的许多喷泉就是这样的例子。 由于初始化后所有粒子统一生成,所以要看到类似喷泉的效果,需要待几个粒子生成周期之后,生成粒子与死亡粒子可以持续交替时,便会呈现出不错的效果。图2展示了300粒子在程序运行过几个粒子生成周期后的效果。 相应初始程序、参数及运动函数如下:
//data set
tmp=Math.random(); _root.particleArr[i].initV_A((2+random(3))*Math.cos(2*Math.PI*tmp),15+random(10),(2+random(3))*Math.sin(2*Math.PI*tmp),0,-0.5+0.15*Math.random(),0);
复制本页网址和标题,发送给你QQ/Msn的好友一起分享
上一篇:
用MovieClipLoader连续加载外部图片并进行控制
下一篇:
理性思考Flash与Ajax相关问题