[发明专利]一种基于粒子系统的火焰模拟加速改进算法有效
申请号: | 201110063186.1 | 申请日: | 2011-03-16 |
公开(公告)号: | CN102147928A | 公开(公告)日: | 2011-08-10 |
发明(设计)人: | 吴庆标;张寻;李冬平;刘春玲 | 申请(专利权)人: | 美通日用品(杭州)有限公司 |
主分类号: | G06T15/00 | 分类号: | G06T15/00;G06T13/60 |
代理公司: | 杭州宇信知识产权代理事务所(普通合伙) 33231 | 代理人: | 张宇娟 |
地址: | 310024 浙江*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 粒子 系统 火焰 模拟 加速 改进 算法 | ||
1.一种基于粒子系统的火焰模拟加速改进算法,其特征在于包括如下步骤:
假定当前系统模拟的火焰需要n个粒子和m条轨迹;
步骤1:预处理
对n个粒子进行模拟计算,直到所有m个粒子都完成一整个生命周期,并且在模拟过程中记录下粒子每一帧的属性,从而形成轨迹,所述轨迹包括以下属性:加速度、颜色、生命值;模拟计算的具体操作包括:由作用力管理器生产下一帧的加速度,生命值=生命值-更新时间×系数,颜色=初始颜色+(最终颜色-初始颜色)×生命值;预处理后得到m条轨迹;
步骤2:生成粒子
由粒子发射器按照定义的规则随机产生n个粒子的初始位移和速度;
步骤3:分配粒子轨迹
对于生成的每一个粒子,为其选择一条轨迹;
步骤4:更新和渲染
(1)更新粒子属性:对于每个粒子,拷贝其所属轨迹中对应当前帧的属性作为粒子当前属性,即粒子加速度=轨迹加速度,粒子颜色=轨迹颜色,粒子生命值=轨迹生命值,然后更新粒子其他属性,若粒子已经到达轨迹的最后一帧,则进入步骤5;
(2)渲染粒子;
(3)更新轨迹生命值属性,即生命值=生命值-更新时间×系数,其中系数为步骤1中所述的系数,如果轨迹的生命小于0,进入步骤6;
(4)循环步骤4,直到系统退出;
步骤5:重新生成粒子
若有1个粒子完成了生命周期,则粒子发射器重新生成一个粒子,具体操作如步骤2;
步骤6:重新计算轨迹
若有1条轨迹完成了生命周期,则用1个粒子重新进行一次模拟计算,具体操作如步骤1,完成后得到一条新的轨迹,将新的轨迹的属性覆盖原有轨迹的属性,然后将原粒子链表中的粒子全部进行一次重新生成,具体操作如步骤4。
2.如权利要求1所述的基于粒子系统的火焰模拟加速改进算法,其特征在于,步骤2中,粒子的位移是依据选定的概率模型在发射器的表面或内部随机产生的,而粒子的速度则是依据发射方向和发射角形成的圆锥内随机选择发射方向。
3.如权利要求1所述的基于粒子系统的火焰模拟加速改进算法,其特征在于,步骤3中,为一个粒子选择一条轨迹对应的具体操作如下:将该粒子的地址添加进这条轨迹的结构中的粒子链表里,同时在粒子自身的属性里添加上该轨迹的编号,并把当前帧数设为第一帧;在步骤5中,不再为该新生成的粒子分配新的轨迹,而是将旧粒子从原轨迹的粒子链表中删除,把新粒子添加进粒子链表中,同时在新粒子的属性中添加该轨迹的编号,并把当前帧数设为第一帧,然后返回步骤4。
4.如权利要求1所述的基于粒子系统的火焰模拟加速改进算法,其特征在于:步骤4的更新粒子属性中,所述其他属性包括粒子速度、粒子位移和帧数,具体更新方式如下:粒子速度=粒子速度+粒子加速度×时间;粒子位移=粒子位移+粒子速度×时间;帧数=帧数+1。
5.如权利要求1所述的基于粒子系统的火焰模拟加速改进算法,其特征在于:
所述步骤4中渲染粒子的具体方法如下:
使用VBO技术进行渲染,每个粒子的顶点数据分为三部分:正方形曲面片的顶点坐标,共4个三维数据;四个顶点的RGBA颜色值,共4个四维数据;四个顶点对应的纹理坐标,共4个二维数据;其中纹理坐标对于每个粒子在每一时刻都是不变的,即从右上角顶点开始沿逆时针依次为:(1,1),(0,1),(1,0),(0,0);
使用VBO渲染的具体操作如下:
1)对顶点坐标数据和颜色数据,分别调用glBindBufferARB和glBufferDataARB函数将缓冲区和数据进行绑定,然后调用glMapBufferARB函数获得缓冲区的指针;
2)假定上一步中得到的顶点数据缓冲区指针为p,粒子的位置坐标为(x,y,z),粒子半径为r,则对第n个粒子数据的赋值如下:
p[4n].x=x+r;p[4n].y=y+r;p[4n].z=z;
p[4n+1].x=x-r;p[4n+1].y=y+r;p[4n+1].z=z;
p[4n+2].x=x-r;p[4n+2].y=y-r;p[4n+2].z=z;
p[4n+3].x=x+r;p[4n+3].y=y-r;p[4n+3].z=z;
假定上一步获得的颜色数据缓冲区指针为c,更新后粒子的颜色属性为(R,G,B),生命值为life,则对第n个粒子数据的赋值如下:
c[4n].R=c[4n+1].R=c[4n+2].R=c[4n+3].R=R;
c[4n].G=c[4n+1].G=c[4n+2].G=c[4n+3].G=G;
c[4n].B=c[4n+1].B=c[4n+2].B=c[4n+3].B=B;
c[4n].A=c[4n+1].A=c[4n+2].A=c[4n+3].A=life;
3)当全部的缓冲区的数据都被更新过后,调用glBindBufferARB和glUnmapBufferARB函数将顶点坐标数据和颜色数据从缓冲区刷新到显卡,然后调用glEnableClientState函数开启顶点坐标、颜色和纹理坐标的指针用于渲染,再依次调用glBindBufferARB函数和顶点坐标、颜色和纹理坐标对应的指针函数,将开启的指针指向相应的数据;
4)最后,调用glDrawArrays函数进行渲染,渲染结束后调用glDisableClientState函数来关闭顶点、颜色和纹理坐标指针。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于美通日用品(杭州)有限公司,未经美通日用品(杭州)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201110063186.1/1.html,转载请声明来源钻瓜专利网。
- 上一篇:维持和改善肌肉功能的方法
- 下一篇:食品