三维粒子系统在AS2中的实现
日期:2007年7月27日 作者: 查看:[大字体 中字体 小字体]-
三维粒子系统在AS2中的实现
Emil Matthew(EmilMatthew@126.com)
摘要:
本文通过粒子系统及三维粒子透视投影变换,运用Flash AS2及其开发环境,实现了基本的三维粒子系统。并结合相关的曲线及运动方式,实现了抛体运动,Fermat 螺线上升运动以及龙卷风效果。表现了一定的数字艺术层的美感。
关键词: 粒子系统,三维,数字艺术
The implement of 3D Particle System in AS2
Emil Matthew(EmilMatthew@126.com)
Abstract:
In this article, with as2 in the flash dev platform, by implementing the project transformation with 3d particle system , I realize a basic particle 3d particle system . Also , with the implementing of some curve and move method , I realize the parabola motion effect , Fermat spiral upward moving effect and the hurricane simulation effect . These effects express some extend of aesthetic feeling in the level of digital art.
Key Words: Particle System, 3D, Digital Art
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);
_root.particleArr[i].initPos(gX0-10+random(20),gY0-50+random(150),gZ0-10+random(20));
//motion effect mode
for(var i:Number=0;i<_root.gParticleNum;i++)
{
if(_root.particleArr[i].isLived())
{
_root.particleArr[i].moveCal();
_root.particleArr[i].moveShow();
}
}

图2
2.3.2Fermat 螺线上升运动:
Fermat螺线的极坐标表达为:
ρ=a*θ ^(1/2)
这里要做的,就是将θ角在某粒子与xz平面垂直的截平面上对应的Fermat螺线极坐标转换成x及z坐标值。再进行相应的更新即可。与前一种不同的是,这里只有y轴方向需要用到vy,而x,z轴的位置则由于采用了坐标控制模式,所以不需要使用vx,vz。为了整体程序设计上的统一,可将vx,vz设定为0。
与上一个抛物线型运动不同,这里的Fermat螺线运动如果新生粒子与死亡粒子构成了持续生成关系时,将使画面较为混乱。因此,需要将粒子的初始y值及vy,ay设定的靠近些。
可以看到,团状的粒子簇旋转上升后又扩散下降,无序之中体现着一丝韵律,我将这样的效果命名为“银河落九天”,不知诸位为以为如何?(参图3)
//data set
tmp=Math.random();
_root.particleArr[i].initV_A(0,18+random(2),0,0,-0.5+0.1*Math.random(),0);
_root.particleArr[i].initRotateEle(0,0,2*Math.PI*i/_root.gParticleNum);
_root.particleArr[i].initPos(gX0-15+random(30),gY0-5+random(10),gZ0-15+random(30));
_root.particleArr[i].fermatSpiralA=15+random(10);
//motion effect mode
for(var i:Number=0;i<_root.gParticleNum;i++)
{
if(_root.particleArr[i].isLived())
{
_root.particleArr[i].accTheta(Math.PI/18);
_root.particleArr[i].moveCalFermatSpiralWithY();
_root.particleArr[i].moveShow();
}
}
点击查看大图 - [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] 下一页
-
- 三维粒子系统在AS2中的实现 相关文章:
- ·非主流ps教程实用的技巧大全
- ·解读身份认证技术现实化
- ·Vista系统实现自动关机技巧
- ·Illustrator传统风格名片设计实例
- ·AutoCAD造型实例:十字形螺丝刀头
- ·AutoCAD造型实例:一字形螺丝刀头
- ·Mac+Win实测 Boot Camp还是虚拟机?
- ·Illustrator绘制精美三维图表实例
- ·JavaScript/JS实现标题栏跑马灯
- ·CSS实例布局:上中下三行 中间自适应
- 三维粒子系统在AS2中的实现 相关软件
- ·《实况足球2007》粤语存档繁体中文版
- ·《NBA实况篮球》街机模拟器
- ·《实况足球8》欧洲PC版商店所有物品存档
- ·超任游戏《实况足球4》模拟器
- ·《实况足球9》实用工具集
- ·大案纪实:惊天绑架案
- ·《沙嘴红灯区》(长篇纪实小说)
- ·真实摔跤
- ·中国第一颗原子弹制造纪实:596秘史
- ·实况足球2008
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
下一篇:15.1 End points and reachability
精品推荐
热点TOP10
- ·图象处理中的边缘检测------canny算子
- ·EZ-USB 68013A开发指南
- ·数值计算程序大放送-特征值和特征向量
- ·ARM的嵌入式Linux移植体验之BootLoader
- ·Visual C++ ADO数据库编程入门
- ·智能手机Smartphone开发导语
- ·利用 wordXP 实现自动排班
- ·[分形]DLA团簇模型的摸拟
- ·DENX U-Boot及Linux使用手册
- ·Visual FoxPro 9.0 SP2正式版下载
- ·VS2005控件的问题解决办法
- ·Cookie是什么?用法是怎样?与SESSION有什么区别?
- ·J2SE API读取Properties文件的六种方法
- ·Silverlight、JavaFX、Flex技术比较
- ·Silverlight将不再支持ArrayList类型
- ·教程:XSLT Designer快速入门指南
- ·创建Web应用和Struts框架配置文件实例
- ·Spring入门指引:理解Spring的打包方式
- ·UDT协议-基于UDP的可靠数据传输协议
- ·解析KJava在移动设备开发中的应用
