一种粒子发射方法和装置与流程

文档序号:16944533发布日期:2019-02-22 21:29阅读:322来源:国知局
一种粒子发射方法和装置与流程

本发明涉及计算机图形学领域,特别是涉及一种粒子发射方法,以及一种粒子发射装置。



背景技术:

Reeves于1983年提出了粒子系统为模糊物体建模的方法,其基本思想是把模糊的物体看作众多粒子组成的粒子团。针对单个粒子而言,可以是显示为点、条纹、球体或其他形状的点。各粒子均具有自己的属性,如颜色、形状、大小、生存周期和速度等等。

粒子由粒子系统发射,一个粒子系统是由一个粒子发射器和多个粒子影响器共同构成的,即粒子系统产生粒子效果。

粒子效果是由多种参数共同作用的结果,参数越丰富,效果就越多样化。粒子发射器的作用是控制发射的粒子在产生时的位置、方向、数量和初始速度。粒子产生后,由粒子对象的属性来控制粒子外观,粒子的动力学性质决定了其在不同的时刻的状态,粒子随时间的推移而不断变化。

现有的粒子发射器类型较为单一,无法实现线发射、椭圆发射、圆发射等多种不同类型的粒子发射。



技术实现要素:

本发明提供了一种粒子发射的方法及装置,以实现线发射、椭圆发射、圆发射等多种不同类型的粒子发射。

本发明提供了一种粒子发射方法,包括:

接收创建的粒子发射器,所述粒子发射器包括一个线段、首尾相连的多个不平行的线段、椭圆或圆;

依据所述粒子发射器的总长度或总角度、发射器角度与所述粒子发射器上发射粒子的粒子发射点的个数,确定发射当前粒子的粒子发射点的坐标位置;

依据设置的发射粒子的第一发射角度、发射方向和发射器角度,确定粒子发射点上发射粒子的第二发射角度,所述发射方向包括内发射、外发射和内外发射;

按照所述第二发射角度和所确定的粒子发射点的坐标位置,在所述粒子发射器上发射当前粒子。

优选地,所述依据粒子发射器的总长度或总角度、发射器角度以及粒子发射器上发射粒子的粒子发射点的个数,确定发射当前粒子的粒子发射点的坐标位置的步骤包括:

计算所述粒子发射器的总长度或总角度;

由所述粒子发射器的总长度或总角度与所述粒子发射器上发射粒子的粒子发射点的个数,得到发射当前粒子的粒子发射点的相对位置;

由所述相对位置与所述粒子发射器的坐标位置,得到发射当前粒子的粒子发射点的初始位置;

按照所述发射器角度对所述初始位置进行逆时针旋转得到发射粒子的粒子发射点的坐标位置。

优选地,若所述粒子发射器的发射方式设置为点发射,所述由粒子发射器的总长度或总角度与粒子发射器上发射粒子的粒子发射点的个数,得到发射当前粒子的粒子发射点的相对位置的步骤包括:

随机产生粒子发射器上发射粒子的粒子发射点的个数,所述粒子发射点的个数为小于设置的最大发射点数目的正数;

由所述总长度或总角度和粒子发射点的个数的乘积与所述最大发射点数目之商,得到发射当前粒子的粒子发射点的相对位置。

优选地,若所述粒子发射器的发射方式设置为非点发射,所述由粒子发射器的总长度或总角度与粒子发射器上发射粒子的粒子发射点的个数,得到发射当前粒子的粒子发射点的相对位置的步骤包括:

随机产生发射当前粒子的粒子发射点的相对位置,所述相对位置为小于所述粒子发射器的总长度或总角度的正数。

优选地,所述依据设置的发射粒子的第一发射角度、发射方向和发射器角度,确定粒子发射点上发射粒子的第二发射角度的步骤包括:

由设置的发射角度参数、发射范围参数和发射方向,计算发射粒子的第一发射角度;

按照所述发射器角度将所述第一发射角度进行逆时针旋转得到发射粒子的第二发射角度。

优选地,所述由设置的发射角度参数、发射范围参数和发射方向,计算发射粒子的第一发射角度的步骤包括:

当所述发射方向为内发射时,将所述发射角度参数与发射角度调整值之和作为所述第一发射角度,所述发射角度调整值为小于所述发射范围参数的正数;

当所述发射方向为外发射时,将所述发射角度参数与发射角度调整值之和的负值作为所述第一发射角度,所述发射角度调整值为随机生成的小于所述发射范围参数的正数;

当所述发射方向为内外发射时,将各个粒子发射点的第一发射角度间隔设置为所述发射角度参数与发射角度调整值之和,以及所述第一发射角度为所述发射角度参数与发射角度调整值之和的负值。

优选地,当所述粒子发射器为椭圆或圆时,所述由设置的发射角度参数和发射范围参数,计算发射粒子的第一发射角度的步骤还包括:

针对所述粒子发射器上的粒子发射点,计算所在位置的切线向量与水平坐标轴的夹角;

按照所述夹角对所述第一发射角度进行逆时针旋转。

本发明还提供了一种粒子发射装置,包括:

创建模块,用于接收创建的粒子发射器,所述粒子发射器包括一个线段、首尾相连的多个不平行的线段、椭圆或圆;

位置确定模块,用于依据所述粒子发射器的总长度或总角度、发射器角度与所述粒子发射器上发射粒子的粒子发射点的个数,确定发射当前粒子的粒子发射点的坐标位置;

角度确定模块,用于依据设置的发射粒子的第一发射角度、发射方向和发射器角度,确定发射粒子的第二发射角度,所述发射方向包括内发射、外发射和内外发射;

发射模块,用于按照所述第二发射角度和所确定的粒子发射点的坐标位置,在所述粒子发射器发射当前粒子。

优选地,所述位置确定模块包括:

计算子模块,用于计算所述粒子发射器的总长度或总角度;

间隔确定子模块,用于由所述粒子发射器的总长度或总角度与所述粒子发射器上发射粒子的粒子发射点的个数,得到发射当前粒子的粒子发射点的相对位置;

初始位置确定子模块,用于由所述相对位置与所述粒子发射器的坐标位置,得到发射当前粒子的粒子发射点的初始位置;

坐标位置确定子模块,用于按照所述发射器角度对所述初始位置进行逆时针旋转得到发射粒子的粒子发射点的坐标位置。

优选地,所述角度确定模块包括:

角度计算子模块,用于由设置的发射角度参数、发射范围参数和发射方向,计算发射粒子的第一发射角度;

角度旋转子模块,用于按照所述发射器角度将所述第一发射角度进行逆时针旋转得到所述粒子发射点上发射粒子的第二发射角度。

与现有技术相比,本发明包括以下优点:

本发明实施例在接收创建的粒子发射器之后,首先依据粒子总长度或总角度,以及所述粒子发射器上发射粒子的粒子发射点的个数,从而确定发射当前粒子的粒子发射点的坐标位置,然后依据设置的发射粒子的第一发射角度、发射方向和发射器角度,确定粒子发射点上发射粒子的第二发射角度,最后根据确定的粒子发射点的发射角度和发射点的坐标位置发射当前粒子,可以依据具体的需要选择由一个线段、首位相连的多个不平行的线段、椭圆或是圆,进行相应的线发射、椭圆发射、圆发射等不同方式的发射,从而为粒子发射提供了多样化的发射方式。

附图说明

图1是本发明实施例所述一种粒子发射方法的流程图;

图2是本发明实施例所述一种粒子发射装置的结构框图;

图3a-3e是本发明实施例中粒子发射器的创建示意图;

图4a-4b是本发明实施例中椭圆发射器的椭圆半径调整示意图;

图5是本发明实施例中设置粒子发射属性的示意图;

图6是本发明实施例中粒子发射点个数为8的线发射器示意图;

图7a-7c是本发明实施例中不同线发射器的效果示意图;

图8a-8f是本发明实施例中椭圆发射器的发射效果示意图;

图9a-9b是本发明实施例中对不同的粒子发射器旋转后的发射效果示意图;

图10是本发明实施例中Z字型的线发射器的发射效果示意图。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。

下面通过实施例对本发明所述方法的实现流程进行详细说明。

参照图1,其示出了本发明实施例所述一种粒子发射方法的流程图。

步骤101、接收创建的粒子发射器,所述粒子发射器包括一个线段、首尾相连的多个不平行的线段、椭圆或圆。

粒子发射器可以控制发射的粒子在产生时的位置、方向、数量和初始速度。本发明实施例中,可以在粒子编辑软件中创建粒子发射器,可以通过选中创建发射器的链接,在界面中设置粒子发射器的形状,在本发明实施例中,粒子发射器可以是线发射器,可以包括一个线段或是首尾相连的多个不平行的线段,粒子发射器也可以是椭圆发射器或圆发射器,相应的可以包括一个椭圆或是一个圆。

如图3a-3d所示,给出了粒子发射器的创建示意图,通过预置的链接选中线发射器后,可以点击界面创建出线发射器的一个端点(如图3a所示),在界面上画一条线,形成第二个端点,得到一个线段(如图3b所示),继续点击界面,形成第三个线段端点(如图3c所示),继续点击界面可以进一步形成第四个线段端点(如图3d所示),停止对界面的操作,可以得到如图3d所示的Z字型的线发射器。

在图3a中,若进一步选择创建椭圆或圆,则发射器类型变成了椭圆发射器,如图3e示出了椭圆发射器的示意图。

在创建椭圆发射器后,还可以进一步通过发射器属性设置链接,进一步设置椭圆的属性参数,包括椭圆的长半径X和短半径Y,本发明实施例中,长半径X和短半径Y的单位为像素,如图4a和图4b给出了本发明实施例中椭圆发射器的椭圆半径调整示意图,图4a中半径X为70像素,半径Y为58像素,图4b中半径X为191像素,半径Y为58像素。

同理,若创建的是圆发射器,还可以进一步通过发射器属性设置链接,进一步设置圆的属性参数,包括圆的半径X。

步骤102、依据所述粒子发射器的总长度或总角度、发射器角度与所述粒子发射器上发射粒子的粒子发射点的个数,确定发射当前粒子的粒子发射点的坐标位置。

粒子发射器上具备多个粒子发射点,创建粒子发射后,可以进一步根据发射器属性设置链接,设置粒子发射器上粒子发射点的最大个数(记为numPoint),如图5所示为本发明实施例中设置粒子发射属性的示意图,其中,numPoint为8,如图6所示给出了粒子发射点个数设置为8的线发射器示意图。

在创建粒子发射器后,在发射粒子前,还需要进一步确定粒子发射器上粒子发射点的具体位置以及发射粒子的角度,由于粒子发射器具备一定的发射频率,在发射每个粒子之前,都需要先确定发射粒子的粒子发射点的具体位置以及发射粒子的角度。

本发明实施例中,依据创建的粒子发射器,以及粒子发射器上发射粒子的粒子发射点的个数,可以进一步确定粒子发射器上各个粒子发射点的坐标位置。

本发明实施例中,所述步骤102可以包括:

子步骤S11、计算所述粒子发射器的总长度或总角度;

子步骤S12、由所述粒子发射器的总长度或总角度与所述粒子发射器上发射粒子的粒子发射点的个数,得到发射当前粒子的粒子发射点的相对位置;

子步骤S13、由所述相对位置与所述粒子发射器的坐标位置,得到发射当前粒子的粒子发射点的初始位置;

子步骤S14、按照所述发射器角度对所述初始位置进行逆时针旋转得到发射粒子的粒子发射点的坐标位置。

具体而言,首先可以计算粒子发射器的总长度或总角度,对于线发射器而言,计算粒子发射器的总长度,粒子发射器的总长度即为各个线段的长度的总和,对于椭圆发射器或圆发射器,计算粒子发射器的总角度,粒子发射器的总角度即为2PI,即2π=360度。

以包含多个线段的线发射器为例,粒子发射器的长度为多个线段组成的折线的长度,假设折线上各个线段的端点分别为point0,point1...pointn,计算折线的长度为LineLength=sqrt((pointn.x-pointn-1.x)×(pointn.x-pointn-1.x)+(pointn.y-pointn-1.y)×(pointn.y-pointn-1.y))+...sqrt((point1.x-point0.x)×(point1.x-point0.x)+(point1.y-point0.y)×(point1.y-point0.y)),即各个端点之间的线段总长度。

依据粒子发射器的总长度或总角度和粒子发射器上粒子发射点的个数可以进一步得到粒子发射器上各个粒子发射点的相对位置,由相对位置进一步确定各个粒子发射点的具体位置。

粒子发射器的发射方式包括点发射和非点发射,根据发射方式的不同,确定粒子发射点的相对位置的方式也不同,在创建粒子发射器后,可以通过预置的发射器属性设置链接,来设置粒子发射器的具体发射方式为点发射还是非点发射。如图5所示的本发明实施例中设置粒子发射属性的示意图中,可以选择粒子发射方式。

具体而言,若所述粒子发射器的发射方式设置为点发射,则在发射器上按距离平均的固定点上发射,将粒子发射器进行等分,在等分点上发射粒子,所述子步骤S12可以包括:

子步骤S12-1、随机产生粒子发射器上发射粒子的粒子发射点的个数,所述粒子发射点的个数为小于设置的最大发射点数目的正数;

子步骤S12-2、由所述总长度或总角度和粒子发射点的个数的乘积与所述最大发射点数目之商,得到发射当前粒子的粒子发射点的相对位置。

在创建粒子发射器后可以进一步选择粒子发射器的发射方式,若发射方式为点发射(bool bPoint)。×最大个数表示粒子发射器上粒子发射点位置的个数,具体的发射点位置是计算在发射最大个数点位置时,两个发射点之间的距离为LineLength/NumPoint,再在零到最大个数之间随机选择一个粒子发射点RandomIndex(RandomIndex范围为[0,NumPoint]),也即是在NumPoint个粒子发射点中选择随机选择一个粒子发射点,该发射点的相对位置为LengthRatio=(RandomIndex×NumPoint)/LineLength。

对于椭圆或是圆发射器,可以将粒子发射器的总角度除以该个数,得到粒子发射器上各个粒子发射点的相对位置(PosAngle),PosAngle=2×(PI/NumPoint)×RandomIndex。

进一步优选地,若所述粒子发射器的发射方式设置为非点发射,则在粒子发射器上的任意位置随机进行发射,所述子步骤S12可以包括:

子步骤S12-3、随机产生发射当前粒子的粒子发射点的相对位置,所述相对位置为小于所述粒子发射器的总长度或总角度的正数。

若粒子发射方式为非点发射,则可以在粒子发射器总长度的范围内随机选择粒子发射器的粒子发射点。

对于线发射器,相对位置(LengthRatio)为小于所述粒子发射器的总长度的正数,即在[0,LineLength]范围内随机产生数RandomIndex,LengthRatio=RandomIndex;对于椭圆或是圆发射器,相对间隔为小于所述粒子发射器的总角度的正数,即在[0,2PI]范围内随机产生数RandomIndex,PosAngle=RandomIndex。

在确定了点发射方式或是非点发射方式下粒子发射点的相对位置后,可以进一步根据粒子发射器的坐标,计算出各个粒子发射点的初始位置。

以线发射器为例,各个端点的坐标为point0,point1...pointn,则进一步将各个端点构成的折线,从0开始计算每段折线段的长度和到起点的总长Sum,找到相对位置所在的折线段,满足Sum[i]<相对位置<Sum[i+1],找到的端点为point[i],point[i+1],根据发射点位置在折线上,满足距折线首端点的折线段距离与相对位置值相等的原理,计算得到粒子发射点在粒子发射器上的初始位置initialPos。公式如下;

initialPos.x=point[i].x+(LengthRatio-Sum[i])/(Sum[i+1]-Sum[i])*(point[i+1].x-point[i].x);

initialPos.Y=(point[i+1].y-point[i].y)/(point[i+1].x-point[i].x)*(point.x-point[i].x)+point[i].y。

以椭圆发射器为例,由于发射器的坐标由椭圆的长半径X和短半径Y来确定(椭圆四个端点的坐标分别为(X,0)、(-X,0)、(0,Y)和(0,-Y)),以相对位置PosAngle和半径X,Y计算出发射点的初始位置position(position.x,position.y),具体为:

position.x=Math::Cos(PosAngle)×X;

position.y=Math::Sin(PosAngle)×Y。

以圆发射器为例,由于发射器的坐标由圆的半径X来确定(圆四个端点的坐标分别为(X,0)、(-X,0)、(0,X)和(0,-X)),以相对位置PosAngle和半径X计算出发射点的初始位置position(position.x,position.y),具体为:

position.x=Math::Cos(PosAngle)×X;

position.y=Math::Sin(PosAngle)×X。

由于针对粒子发射器还设置了粒子发射器的角度,发射器角度是将整个发射器做旋转,包括发射方向和发射的位置,需要按照发射器方向对粒子发射点的初始位置以及发射方向进行调整,因此,得到发射当前粒子的粒子发射点在粒子发射器上的位置后,可以进一步按照所述发射器角度对所述初始位置进行逆时针旋转得到发射粒子的粒子发射点的坐标位置,此处的坐标位置即为发射粒子的最终位置,对初始位置调整如下:

pX=pParticle->position.x;

pY=pParticle->position.y;

pParticle->position.x=pX×rAngleCos-pY×rAngleSin;

pParticle->position.y=pX×rAngleSin+pY×rAngleCos;

rX:表示临时变量为粒子发射方向的X值

rY:表示临时变量为粒子发射方向的Y值

rAngleCos:表示rAngleCos为发射器角度的余弦值

rAngleSin:表示rAngleSin为发射器角度的正弦值

pX:表示临时变量为粒子位置的X值

pY:表示临时变量为粒子位置的Y值

步骤103、依据设置的发射粒子的第一发射角度、发射方向和发射器角度,确定粒子发射点上发射粒子的第二发射角度,所述发射方向包括内发射、外发射和内外发射。

本发明实施例中,针对粒子发射器设置的第一发射角度和发射器角度,进一步确定粒子发射器的实际发射角度,即第二发射角度,所述步骤103可以包括:

子步骤S21、由设置的发射角度参数、发射范围参数和发射方向,计算发射粒子的第一发射角度;

第一发射角度依据设置的发射角度参数、发射范围参数和发射方向来确定,发射方向包括内发射、外发射和内外发射。具体而言,可以通过预置的发射器属性设置链接(如图5所示)设置发射器的发射角度参数和发射范围参数,以及发射方向是内发射(bool bIn)、外发射(bool bOut)或是内外发射,内发射是按照发射方向的方向发射,外发射是按照发射方向的反方向发射,内外发射是同时按照发射方向的方向,以及发射方向的反方向同时发射,选择内外发射时可以同时选中内发射和外发射。

当选择内发射时,将所述发射角度参数与发射角度调整值之和作为所述第一发射角度,所述发射角度调整值为小于所述发射范围参数的正数。具体而言,首先根据所述发射范围参数(directionRange)随机产生一个发射角度调整值,发射角度调整值的范围为(0,directionRange),其中,若发射范围参数为0,则发射角度调整值也为0。第一发射角度(particle.direction)为发射角度参数和发射角度调整值之和,可以表示为particle.direction=direction+Rand(0,directionRange)。如图7a-7c示出了本发明实施例中不同线发射器的效果示意图,如图7a所示,将线发射器的发射角度参数设置为90度,发射范围参数为0,设置为内发射时,得到的发射效果,其中第一发射角度90度。

相应的,图8a和图8b示出了本发明实施例中椭圆发射器的发射效果示意图,其中,发射角度参数设置为90度,发射范围参数为0,设置为内发射时,在不同的背景(第10帧背景图像和第20帧背景图像)下得到的发射效果。

当选择外发射时,将所述发射角度参数与发射角度调整值之和的负值作为所述第一发射角度,所述发射角度调整值为随机生成的小于所述发射范围参数的正数。同样,首先根据所述发射范围参数(directionRange)随机产生一个发射角度调整值,发射角度调整值的范围为(0,directionRange),其中,若发射范围参数为0,则发射角度调整值也为0。第一发射角度(particle.direction)为发射角度参数和发射角度调整值之和的负值,可以表示为particle.direction=-(direction+Rand(0,directionRange))。如图7b所示,将线发射器的发射角度参数设置为90度,发射范围参数为0,设置为外发射时,得到的发射效果,其中第一发射角度-90度。

相应的,图8c和图8d示出了将椭圆发射器的发射角度参数设置为90度,发射范围参数为0,设置为外发射时,在不同的背景(第10帧背景图像和第20帧背景图像)下得到的发射效果。

当同时选择内发射和外发射时,将粒子发射点的第一发射角度间隔设置为所述发射角度参数与发射角度调整值之和,以及所述第一发射角度为所述发射角度参数与发射角度调整值之和的负值。同样,首先根据所述发射范围参数(directionRange)随机产生一个发射角度调整值,发射角度调整值的范围为(0,directionRange),其中,若发射范围参数为0,则发射角度调整值也为0。第一发射角度(particle.direction)为发射角度参数和发射角度调整值之和的负值,可以表示为particle.direction=direction+Rand(0,directionRange)或particle.direction=-(direction+Rand(0,directionRange))。如图7c所示,将线发射器的发射角度参数设置为90度,发射范围参数为0,设置为内外发射时,得到的发射效果,其中第一发射角度90或-90度。

相应的,图8e和图8f示出了将椭圆发射器的发射角度参数设置为90度,发射范围参数为0,设置为内外发射时,在不同的背景(第10帧背景图像和第20帧背景图像)下得到的发射效果。

当所述粒子发射器为椭圆或圆时,所述子步骤S21可以还可以进一步包括:

子步骤S21-4、针对所述粒子发射器上的粒子发射点,计算所在位置的切线向量与水平坐标轴的夹角;

子步骤S21-5、按照所述夹角对所述第一发射角度进行逆时针旋转。

针对圆或是椭圆,在粒子发射的点都是在椭圆或圆边界上的,由于每个粒子发射点的横纵坐标值都不相同,粒子的发射方向与所在位置有关系,因此,针对得到的第一发射角度,还需要按照发射点所在位置对粒子的发射方向进行再修正。

rX=pParticle->direction.x;

rY=pParticle->direction.y;

其中,pParticle->direction为经过发射器角度参数作用前粒子的发射方向,rX表示临时变量为粒子发射方向的X值,rY表示临时变量为粒子发射方向的Y值;

然后进行如下转换,得到转换后的发射方向:

pParticle->direction.x=rX×rAngleCos-rY×rAngleSin;

pParticle->direction.y=rX×rAngleSin+rY×rAngleCos;

其中,rAngleCos表示切线向量与X轴夹角的余弦值,rAngleSin表示切线向量与X轴夹角的正弦值。

通过上述转换,可以得到粒子发射点的切线向量与X轴夹角的角度值,根据该角度值对粒子的发射方向进行逆时针旋转。每个点的发射方向与其切线向量相同时为零方向,即放射方向是以切线向量作为零向量,逆时针旋转为正方向的发射。

子步骤S22、按照所述发射器角度将所述第一发射角度进行逆时针旋转得到发射粒子的第二发射角度。

在获得第一发射角度后,还需要进一步按照发射器角度对第一发射角度进行调整,粒子发射器最终是按照第二发射角度发射粒子的。

发射器角度是用于对粒子发射器的方向进行调整,效果是将粒子发射器按照发射器角度进行逆时针旋转。

具体的,在对线发射器进行旋转时,若线发射器包括多个线段,则需要计算粒子发射点所在线段在旋转前与水平坐标轴X轴的夹角,具体而言,首先按照如下公式计算粒子发射点所在线段的起点mVertexArray[i]到终点mVertexArray[i+1]的向量与X轴的夹角的cos及sin:

rDistance=sqrt((mVertexArray[i+1].x-mVertexArray[i].x)×(mVertexArray[i+1].x-mVertexArray[i].x)+(mVertexArray[i+1].y-mVertexArray[i].y)×(mVertex Array[i+1].y-mVertexArray[i].y));

rAngleCos=(mVertexArray[i+1].x-mVertexArray[i].x)/rDistance;

rAngleSin=(mVertexArray[i+1].y-mVertexArray[i].y)/rDistance;

其中:

mVertexArray:表示线发射器的线端点数组

rDistance:表示mVertexArray[i]到mVertexArray[i+1]的距离

rAngleCos:表示线向量与X轴夹角的余弦值

rAngleSin:表示线向量与X轴夹角的正弦值

通过进行如下转换,实现对发射方向进行逆时针旋转发射器角度值,得到实际发射方向:

rX=pParticle->direction.x;

rY=pParticle->direction.y;

pParticle->direction.x=rX×rAngleCos-rY×rAngleSin;

pParticle->direction.y=rX×rAngleSin+rY×rAngleCos;

其中,pParticle->direction为经过发射器角度参数作用前粒子的发射方向,rX表示临时变量为粒子发射方向的X值,rY表示临时变量为粒子发射方向的Y值,rAngleCos为发射器角度的余弦值,rAngleSin为发射器角度的正弦值。

同理,对椭圆发射器进行旋转时,也需要对发射方向进行逆时针旋转发射器角度值,得到实际发射方向:

rX=pParticle->direction.x;

rY=pParticle->direction.y;

pParticle->direction.x=rX×rAngleCos-rY×rAngleSin;

pParticle->direction.y=rX×rAngleSin+rY×rAngleCos。

图9a-9b是本发明实施例中对不同的粒子发射器旋转后的发射效果示意图,其中,如图9a示出了对水平方向的线发射器旋转90度后的发射效果示意图,图9b示出了对水平方向的椭圆发射器旋转22度后的发射效果示意图。

步骤104、按照所述第二发射角度和所确定的粒子发射点的坐标位置,在所述粒子发射器上发射当前粒子。

按照第二发射角度和粒子发射点的坐标位置,在所述粒子发射器上的各个粒子发射点发射粒子,具体而言,发射粒子时,可以调用第三方SDK Root::renderOneFrame(),按照第二发射角度和各个粒子发射点的坐标位置来更新整个场景数据,从而得到粒子发射效果。

如图10示出了本发明实施例的图3d中Z字型的线发射器的发射效果,其中,发射器的发射角度为0,发射器的发射范围为0,发射器的角度为0,粒子速度为0。

本发明实施例在接收创建的粒子发射器之后,首先依据粒子总长度或总角度,以及所述粒子发射器上发射粒子的粒子发射点的个数,从而确定发射当前粒子的粒子发射点的坐标位置,然后依据设置的发射粒子的第一发射角度、发射方向和发射器角度,确定各个粒子发射点上发射粒子的第二发射角度,最后根据确定的粒子发射点的发射角度和发射点的坐标位置发射当前粒子,可以依据具体的需要选择由一个线段、首位相连的多个不平行的线段、椭圆或是圆,进行相应的线发射、椭圆发射、圆发射等不同方式的发射,从而为粒子发射提供了多样化的发射方式。

需要说明的是,对于前述的方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明所必需的。

基于上述方法实施例的说明,本发明还提供了相应的粒子发射装置实施例,来实现上述方法实施例所述的内容。

参照图2,其示出了本发明实施例所述一种粒子发射装置的结构框图,具体可以包括:

创建模块201,用于接收创建的粒子发射器,所述粒子发射器包括一个线段、首尾相连的多个不平行的线段、椭圆或圆;

位置确定模块202,用于依据所述粒子发射器的总长度或总角度、发射器角度与所述粒子发射器上发射粒子的粒子发射点的个数,确定发射当前粒子的粒子发射点的坐标位置;

角度确定模块203,用于依据设置的发射粒子的第一发射角度、发射方向和发射器角度,确定粒子发射点上发射粒子的第二发射角度;

发射模块204,用于按照所述第二发射角度和所确定的粒子发射点的位置,在所述粒子发射器上发射当前粒子。

在本发明实施例中,所述位置确定模块可以包括:

计算子模块,用于计算所述粒子发射器的总长度或总角度;

间隔确定子模块,用于由所述粒子发射器的总长度或总角度与所述粒子发射器上发射粒子的粒子发射点的个数,得到发射当前粒子的粒子发射点的相对位置;

发射点位置确定子模块,用于由所述相对位置与所述粒子发射器的坐标位置,得到发射当前粒子的粒子发射点的初始位置;

坐标位置确定子模块,用于按照所述发射器角度对所述初始位置进行逆时针旋转得到发射粒子的粒子发射点的坐标位置。

在本发明实施例中,若所述粒子发射器的发射方式设置为点发射,所述间隔确定子模块可以包括:

发射点个数确定子单元,用于随机产生粒子发射器上发射粒子的粒子发射点的个数,所述粒子发射点的个数为小于设置的最大发射点数目的正数;

间隔计算子单元,用于由所述总长度或总角度和粒子发射点的个数的乘积与所述最大发射点数目之商,得到发射当前粒子的粒子发射点的相对位置。

在本发明实施例中,若所述粒子发射器的发射方式设置为非点发射,所述间隔确定子模块包括:

间隔产生子单元,用于随机产生发射当前粒子的粒子发射点的相对位置,所述相对位置为小于所述粒子发射器的总长度或总角度的正数。

在本发明实施例中,所述角度确定模块可以包括:

角度计算子模块,用于由设置的发射角度参数、发射范围参数和发射方向,计算发射粒子的第一发射角度;

角度旋转子模块,用于按照所述发射器角度将所述第一发射角度进行逆时针旋转得到发射粒子的第二发射角度。

在本发明实施例中,所述角度计算子模块可以包括:

内发射子单元,用于当所述发射方向为内发射时,将所述发射角度参数与发射角度调整值之和作为所述第一发射角度,所述发射角度调整值为小于所述发射范围参数的正数;

外发射子单元,用于当所述发射方向为外发射时,将所述发射角度参数与发射角度调整值之和的负值作为所述第一发射角度,所述发射角度调整值为随机生成的小于所述发射范围参数的正数;

内外发射子单元,用于当所述发射方向为内外发射时,将各个粒子发射点的第一发射角度间隔设置为所述发射角度参数与发射角度调整值之和,以及所述第一发射角度为所述发射角度参数与发射角度调整值之和的负值。

在本发明实施例中,当所述粒子发射器为椭圆或圆时,所述角度计算子模块还可以包括:

夹角确定子单元,用于针对所述粒子发射器上的粒子发射点,计算所在位置的切线向量与水平坐标轴的夹角;

旋转子单元,用于按照所述夹角对所述第一发射角度进行逆时针旋转。

本发明实施例在接收创建的粒子发射器之后,首先依据粒子总长度或总角度,以及所述粒子发射器上发射粒子的粒子发射点的个数,从而确定发射当前粒子的粒子发射点的坐标位置,然后依据设置的发射粒子的第一发射角度、发射方向和发射器角度,确定各个粒子发射点上发射粒子的第二发射角度,最后根据确定的粒子发射点的发射角度和发射点的坐标位置发射当前粒子,可以依据具体的需要选择由一个线段、首位相连的多个不平行的线段、椭圆或是圆,进行相应的线发射、椭圆发射、圆发射等不同方式的发射,从而为粒子发射提供了多样化的发射方式。

对于上述粒子发射装置的实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见图1所示方法实施例的部分说明即可。

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

本领域技术人员易于想到的是:上述各个实施例的任意组合应用都是可行的,故上述各个实施例之间的任意组合都是本发明的实施方案,但是由于篇幅限制,本说明书在此就不一一详述了。

本发明可用于众多通用或专用的计算系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。

最后,还需要说明的是,在本文中,术语“包括”、“包含”,不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括......”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

以上对本发明所提供的一种粒子发射方法及装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1