首页> 中国专利> 一种粒子系统中粒子顶点数据的更新方法

一种粒子系统中粒子顶点数据的更新方法

摘要

本发明公开了一种粒子系统中粒子顶点数据的更新方法,属于图像绘制技术领域。该方法包括:确定当前粒子系统中所需的粒子的相关参数,并根据确定的所述相关参数进行粒子系统初始化,在初始化阶段配置了粒子顶点数据的存储方式,之后顶点数据更新的过程中,根据所述存储方式确定出需要更新的粒子的顶点数据的范围后,完成对应范围内的顶点数据的更新。本发明所述的方法,将粒子的顶点数据分为了顶点变化数据和顶点固定数据,通过使用动态顶点数据的更新方式,减少了每次绘制时的数据更新操作,大大提高了顶点数据更新的效率。

著录项

  • 公开/公告号CN104700446A

    专利类型发明专利

  • 公开/公告日2015-06-10

    原文格式PDF

  • 申请/专利权人 境界游戏股份有限公司;

    申请/专利号CN201510143517.0

  • 发明设计人 李启虎;

    申请日2015-03-31

  • 分类号G06T15/00(20110101);

  • 代理机构

  • 代理人

  • 地址 100080 北京市海淀区中关村大街1号海龙大厦11层南区

  • 入库时间 2023-12-18 09:18:47

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-10-03

    授权

    授权

  • 2015-07-08

    实质审查的生效 IPC(主分类):G06T15/00 申请日:20150331

    实质审查的生效

  • 2015-06-10

    公开

    公开

说明书

技术领域

本发明属于计算机图形技术领域,具体涉及一种粒子系统中粒子顶点数 据的更新方法。

背景技术

粒子系统是三维计算机图形学中模拟一些特定的不规则模糊景象的技 术,而这些景象用其它传统的渲染技术难以实现的真实感。在粒子系统中,景 象被定义为由成千上万个不规则的、随机分布的粒子所组成,而每一个粒子 均有一定的生命周期,它们不断改变形状、不断运动,充分地体现了不规则 物体的性质。经常使用粒子系统模拟的现象有火、爆炸、烟、水流、火花、 溅血、落叶、云、雾、雪、尘、流星尾迹或者发光轨迹这样的抽象视觉效果 等等。粒子系统方法具有良好的随机性和动态性,能逼真地模拟动态景物。 因此,利用粒子系统方法模拟自然景物,有着重要的科学意义和广泛的应用 前景,在系统仿真、影视特效、三维游戏中有广泛的应用。

粒子系统更新循环划分为两个不同的阶段:参数更新/模拟阶段以及渲染 阶段。参数更新/模拟阶段根据粒子系统信息更新每个粒子的位置等属性信 息;渲染阶段根据粒子属性重新绘制粒子。拖尾效果(如流星、刀光剑影等 效果的制作)作为粒子系统中最重要的一种渲染器被大量应用到各种场景中。 现有技术中,拖尾效果的每次绘制都需要在中央处理器CPU上对所有粒子的 历史信息进行更新,然后把所有的信息提交到显卡,在图像处理器GPU对更 新后的粒子进行渲染,完成拖尾效果的绘制,而大量的数据更新及资源锁定 操作会大大影响CPU的性能。

发明内容

针对现有技术中存在的缺陷,本发明的目的在于提供一种粒子系统中粒 子顶点数据的更新方法,通过该方法能够有效降低粒子顶点数据更新的复杂 度,提高数据更新效率。

为实现上述目的,本发明采用的技术方案如下:

一种粒子系统中粒子顶点数据的更新方法,包括以下步骤:

(1)确定当前粒子系统中所需的粒子的相关参数,所述相关参数包括所 需的粒子数量、粒子类型、粒子宽度、粒子的绘制段数以及渲染阶段所需的 贴图;所述粒子类型为三角形,在渲染阶段采用四边形进行渲染;

(2)根据所述相关参数进行粒子系统的初始化,包括:生成所述粒子数 量的粒子,确定粒子的顶点数据的存储方式;所述粒子的顶点数据包括粒子 的每一段的顶点数据;所述粒子的每一段的顶点数据包括顶点变化数据VB1 和顶点固定数据VB2,顶点变化数据VB1包括顶点位置坐标和顶点朝向,顶 点固定数据VB2为顶点纹理坐标UV;

粒子的顶点变化数据VB1的存储方式为:按照粒子的段数顺序存储每个 粒子每一段的顶点变化数据VB1,且每一段的顶点变化数据VB1连续存储两 次,并按照存储顺序设置每一个数据的索引;

假设粒子数量为m、粒子的绘制段数为n,则粒子的顶点变化数据VB1 存储为:

V11V11V21V21...Vm1Vm1V12V12V22V22...Vm2Vm2.....................V1nV1nV2nV2n...VmnVmn

其中,Vmn-1和Vmn分别表示第m个粒子第n段的起始的顶点变化数据和结 束的顶点变化数据;

粒子的顶点固定数据VB2的存储方式为:按照粒子的段数顺序存储每个 粒子每一段的顶点固定数据,完成一次存储后,按照粒子的段数再次顺序存 储每个粒子每一段的顶点固定数据;存储完成后,按照存储顺序设置每一个 数据的索引;

(3)确定需要更新的粒子的顶点数据的范围,包括:确定需要更新的顶 点变化数据VB1和更新时的顶点固定数据VB2;其中,顶点朝向为当前顶点 位置坐标到更新后的顶点位置坐标的方向;

确定需要更新的顶点位置坐标的方式为:根据粒子的顶点位置坐标的存 储方式和此次粒子更新的次数,得到粒子此次需要更新的顶点位置坐标的索 引范围A,索引范围A对应的顶点位置坐标为此次需要更新的顶点位置坐标;

确定更新时的顶点固定坐标VB2的方式为:根据粒子的顶点固定数据VB2 的存储方式和此次粒子更新的次数,确定出更新时的顶点固定数据VB2;

(4)根据粒子当前的顶点位置坐标、此次更新后的顶点位置坐标、粒子 宽度和确定出的需要更新的顶点变化数据VB1进行顶点变化数据VB1的更新, 并根据确定出的更新时的顶点固定数据VB2进行此次更新时的顶点固定数据 VB2的更新;

(5)按照粒子的顺序合并更新后的顶点变化数据VB1和更新时的顶点固 定数据VB2,得到更新后的粒子的顶点数据。

可选地,如上所述的一种粒子系统中粒子顶点数据的更新方法,步骤(3) 中,所述得到粒子此次需要更新的顶点位置坐标的索引范围A,包括:

假设粒子数量为m、粒子的绘制段数为n,记i为每次更新时的顶点变化 数据的起始位置即起始索引,索引范围A的方式为:

当i≤n+1时,则需要更新的顶点位置坐标的索引范围A为 [2m(i-1),2mi-1]

当k(n+1)<i≤(k+1)(n+1)时,则需要更新的顶点位置坐标的索引范 围A为[2m(i-km-1),2m(i-km)-1],其中,k≥1。

可选地,如上所述的一种粒子系统中粒子顶点数据的更新方法,步骤(3) 中,根据粒子的顶点固定数据VB2的存储方式和此次粒子更新的次数,确定 出更新时的顶点固定数据VB2,包括:判断所述此次粒子更新的次数是否大 于粒子的绘制段数,若否,则此次粒子更新时的顶点固定数据VB2的起始索 引B为所述索引范围A的起始索引,若是,则此次粒子更新时的顶点固定数 据VB2的起始索引B为所述索引范围A的起始索引加上C,其中,C=2×粒 子的数量×粒子的绘制段数。

可选地,如上所述的一种粒子系统中粒子顶点数据的更新方法,当此次 粒子更新的次数大于粒子的绘制段数时,将此次更新后的粒子的顶点数据覆 盖粒子最早更新的一段的顶点数据。

可选地,如上所述的一种粒子系统中粒子顶点数据的更新方法,所述方 法还包括:

在粒子顶点数据的更新过程中,遍历粒子系统中的所有粒子,判断粒子 的存在时间是否大于设定时间,若是则判断粒子死亡;

遍历粒子系统中所有粒子,判断粒子的速度是否大于设定速度,若是则 判断粒子死亡;

遍历粒子系统中所有粒子,判断粒子所在区域是否超出生成区域,若是 则判断粒子死亡。

可选地,如上所述的一种粒子系统中粒子顶点数据的更新方法,当粒子 死亡后,该粒子所对应的所有顶点数据为无效数据。

可选地,如上所述的一种粒子系统中粒子顶点数据的更新方法,当粒子 死亡后,生成新的粒子,粒子死亡后下一次的顶点数据为新的粒子的顶点数 据。

本发明的有益效果在于:本发明所述的方法,将粒子的顶点数据分为了 顶点变化数据和顶点固定数据,通过使用动态顶点数据的更新方式,减少了 每次绘制时的数据更新操作,大大提高了顶点数据更新的效率。

附图说明

图1为本发明实施例中提供的一种粒子系统中粒子顶点数据的更新方法 的流程图;

图2为本发明实施例中顶点变化数据的示意图;

图3为本发明实施例中顶点固定数据的示意图;

图4为本发明实施例中对第1个粒子进行绘制后的示意图;

图5为本发明实施例中对第2个粒子进行绘制后的示意图;

图6为本发明实施例中对第3个粒子进行绘制后的示意图;

图7为本发明实施例中对第4个粒子进行绘制后的示意图。

具体实施方式

下面结合附图,对本发明的具体实施方式做进一步的详细说明。

粒子系统是由多个粒子组成的,每个粒子是一个带纹理的三角形或多边 形,粒子按一定规则运动;每个粒子有自己的属性,如位置、速度、质量、 颜色等。粒子系统的更新循环,需要在参数更新/模拟阶段根据粒子系统信息 更新每个粒子属性信息,渲染阶段根据粒子属性重新绘制粒子。可见,粒子 的属性信息更新是粒子系统更新循环中尤为重要的过程,而现有粒子属性信 息的更新方式中计算量巨大,大量的数据更新及资源锁定操作会大大影响 CPU的性能。本发明实施例正是针对该问题而提出的一种粒子系统中粒子顶 点数据的更新方法,通过该方法有效减低数据更新时的计算量,达到了提升 系统性能的目的。

图1示出了本发明实施例中提供的一种粒子系统中粒子顶点数据的更新 方法,由图中可以看出,该方法可以包括以下几个步骤:

步骤S1:确定当前粒子系统的相关参数;

通常粒子系统在三维空间中的位置与运动是由发射器控制的。发射器主 要由一组粒子行为参数以及在三维空间中的位置所表示。粒子行为参数可以 包括粒子生成速度(即单位时间粒子生成的数目)、粒子初始速度向量(例如 什么时候向什么方向运动)、粒子寿命(经过多长时间粒子湮灭)等等。因此, 在进行系统的初始化之前,首先需要确定当前粒子系统的相关参数。

本实施例中,所述相关参数包括但不限于所需的粒子数量、粒子类型、 粒子宽度、粒子的绘制段数以及渲染阶段所需的贴图;所述粒子类型为三角 形,在渲染阶段采用四边形进行渲染。

本发明实施例中,每个粒子选用三角形,即显卡显示绘制图形的单位为 三角形,每个三角形有三个顶点,每个顶点都有位置信息、颜色信息等等, 显卡根据三个顶点的信息绘制出一个三角形。由于在绘制完成进行渲染时, 通常每个粒子是用经过纹理映射的四边形像素图sprite(四边形总是面向观 察者)进行渲染,也就是说,每个粒子在绘制时需要2个三角形,4个顶点 (2个三角形共用2个顶点),每个三角形3个顶点索引,因此,在绘制渲 染阶段,每个粒子需要有四个顶点数据。

贴图的过程指的将材质平面图,覆于与立体模型上的过程,也就是说, 贴图是用来显示粒子的细节,即相当于把贴图覆盖到对应的三角形上。贴图 是一张图片,可以是bmp图片、tga图片等。本实施例中,粒子的绘制段数 即粒子的轨迹段数决定了贴图的分割段数,贴图的分割段数step决定将当前 的贴图等分为几份,在渲染阶段,粒子的每一段轨迹只使用贴图的一份。

步骤S2:根据所述相关参数进行粒子系统的初始化;

本实施例中,所述初始化包括:生成所述粒子数量的粒子,确定粒子的 顶点数据的存储方式。

在完成相关参数的设置后,粒子系统生成对应数量的粒子、并确定出粒 子的顶点数据的存储方式,其中,所述粒子的顶点数据包括粒子的每一段的 顶点数据。由于绘制阶段粒子的每一段轨迹需要四个顶点数据,如图2所示, 假设粒子的绘制段数为3,第一段的顶点数据包括a、b、c、d四个顶点数据, a、b为第一段的起始顶点数据,c、d为完成一次更新后的第一段的结束顶点 数据,也是第二段的起始顶点数据,第二段包括c、d、e、f四个顶点数据, 第三段包括e、f、g、h四个顶点数据。其中,a、d、f、h是粒子的实际顶 点数据,b、c、e、g的顶点数据是由据a、d、f、h的顶点数据和粒子宽度 决定的。

本发明实施例中,为了提供后续粒子顶点数据更新的效率,将粒子的每 一段的顶点数据分为了两部分,一部分是顶点变化数据VB1,另一部分是顶 点固定数据VB2,其中,顶点变化数据VB1包括顶点位置坐标和顶点朝向, 顶点固定数据VB2为顶点纹理坐标UV,在顶点数据更新阶段,分别完成顶点 变化数据VB1和顶点固定数据VB2,在绘制时,再将两部分数据合并进行绘 制。

其中,所述顶点位置坐标指的是当前粒子的位置,顶点朝向为顶点上次 更新时的位置到现在的位置的方向,如果粒子是第一次更新,没有历史位置 信息,顶点朝向则使用粒子速度的方向。顶点纹理坐标UV表示了顶点使用贴 图哪个位置的颜色,即UV信息定义了贴图上每个点的位置的信息,用于确定 如何将一个纹理图像(贴图)放置在三维的模型表面,对于纹理贴图而言, 一张贴图的U坐标和V坐标的数值范围都是0到1,U表示贴图的水平方向坐 标,U为0表示贴图的最左边,U为1表示贴图的最右边;V表示贴图的数字 方向,V为0表示贴图的下边,V为1表示贴图的最上边。如图3所示,假设 粒子的绘制段数为4段,则贴图需要分成4段,粒子的第一段轨迹所对应的 的4个顶点UV为(0.0,0.0)、(1.0,0.0)、(1.0,0.25)、(0.0,0.25),其中, (0.0,0.0)、(1.0,0.0)为起始UV坐标,(1.0,0.25)、(0.0,0.25)为结束 UV坐标。由于V坐标表示了粒子的当前段数在粒子总段数的比例,而粒子的 绘制段数与贴图的段数是一一对应的,因此,可以根据该比例计算出V坐标, 计算方式如下:

V坐标计算方式:起始V坐标=(粒子的当前段数-1)×1.0/总段数;

结束V坐标=粒子的当前段数×1.0/总段数。

本实施例中,所述粒子的顶点变化数据VB1采用的存储方式为:按照粒 子的段数顺序存储每个粒子每一段的顶点变化数据VB1,且每一段的顶点变 化数据VB1连续存储两次,并按照存储顺序设置每一个数据的索引;具体如 下:

假设粒子数量为m、粒子的绘制段数为n,则粒子的顶点变化数据VB1 存储为:

V11V11V21V21...Vm1Vm1V12V12V22V22...Vm2Vm2.....................V1nV1nV2nV2n...VmnVmn

其中,Vmn-1和Vmn分别表示第m个粒子第n段的起始的顶点变化数据和结 束的顶点变化数据。假设有3个粒子,则在存储时,按照顺序先存储第一个 粒子的第一段的顶点变化数据,再存储第二个粒子的第一段顶点变化数据, 之后存储第二个粒子的第一段顶点变化数据,这样完成低于段的存储后,再 进行第二段的存储直到最后一段的存储。存储时,由于b、c、e、g对应的顶 点变化数据是由a、d、f、h的顶点数据和粒子宽度决定的,因此,实际存储 时只需要存储粒子的实际顶点变化数据,即a、d、f、h的顶点变化数据,每 个数据连续存储两次,这样在绘制时便可以根据得到四个顶点变化数据了。 如图2所示,在绘制计算时,只需要知道a和d的位置坐标,便可以根据粒 子的朝向和粒子宽度计算出b和c的坐标,因此通过采用对a和d的位置坐 标连续存储两次的方式,即a位置坐标、a位置坐标、d位置坐标和d位置坐 标,在数据更新时,只需要计算出b位置坐标对于a位置坐标的偏移,将该 偏移加到第二个a位置坐标上,即可以得到b位置坐标,而无须再一一计算 四个顶点数据。

对顶点变化数据VB1的顶点位置坐标和顶点朝向均采用上述存储方式。 在完成顶点变化数据VB1的存储后,设置每个数据的索引信息,其中,索引 为数字,按照存储顺序进行设置。

本实施例中,粒子的顶点固定数据VB2的存储方式为:按照粒子的段数 顺序存储每个粒子每一段的顶点固定数据VB2,完成一次存储后,按照粒子 的段数再次顺序存储每个粒子每一段的顶点固定数据VB2;存储完成后,按 照存储顺序设置每一个数据的索引。

由于粒子的绘制段数跟粒子的顶点固定数据VB2即UV坐标是一一对应 的,即粒子的第一段的对应的是贴图的第一部分,因此,采用上述方式存储 顶点固定数据VB2的方式,进行一次存储后,后续更新时,每次绘制时就不 需要每次再修改顶点固定数据VB2,只需要调整上述存储的顶点固定数据VB2 的偏移即可,通过该偏移的调整,即可确定出每次更新时开始的顶点固定数 据VB2。

本实施例中,顶点变化数据VB1对应的索引和顶点固定数据VB2对应的 索引在设置时,都是根据数据存储的顺序进行设置,且索引数字从0开始。

步骤S3:确定需要更新的粒子的顶点数据的范围;

本实施例中,由于将顶点数据分为了顶点变化数据VB1和顶点固定数据 VB2,因此,该步骤中,在进行数据更新时,首先需要确定出需要更新的顶点 变化数据VB1和更新时的顶点固定数据VB2。

对于顶点变化数据VB1中的朝向信息,顶点朝向为当前顶点位置坐标到 更新后的顶点位置坐标的方向,如果是第一次更新,没有当前顶点位置坐标, 则朝向使用粒子速度的方向。由于顶点朝向可以根据顶点位置坐标进行确定, 因此,本实施例中所述的顶点变化数据的更新主要是指顶点位置坐标的更新。

确定需要更新的顶点位置坐标的方式为:根据粒子的顶点位置坐标的存 储方式和此次粒子更新的次数,得到粒子此次需要更新的顶点位置坐标的索 引范围A,索引范围A对应的顶点位置坐标为此次需要更新的顶点位置坐标。 由于在确定顶点变化数据的存储方式时,为每一数据设置了索引,因此,只 需要确定出需要更新的索引范围,即可确认出需要更新哪些顶点变化数据 VB1。

本实施例中,确定粒子此次需要更新的顶点位置坐标的索引范围A的方 式为:

假设粒子数量为m、粒子的绘制段数为n,记i为每次更新时的顶点变化 数据的起始位置即起始索引,索引范围A的方式为:

当i≤n时,则需要更新的顶点位置坐标的索引范围A为[2m(i-1),2mi-1]

当k(n+1)<i≤(k+1)(n+1)时,则需要更新的顶点位置坐标的索引范 围A为[2m(i-km-1),2m(i-km)-1],其中,k≥1;这是因为当更新次数大于粒 子的绘制段数时,每一段的数据至少已经覆盖了一次,即从左到右进行更新 数据时,当到达尾部时,再回到第一段数据进行更新。例如,粒子有4个, 粒子绘制段数为5段,即m=4,n=5,则在数据存储时,4个粒子第一段的数据 对应的索引范围为[0,2n-1]即[0,7],最后一段对应数据的索引范围为 [40,47],当完成第5次更新时,完成了所有段数对应数据的更新,第6次更 新时,需要覆盖掉第一段的数据,只保留最新的5段数据。

采用本发明实施例中提供的顶点位置坐标的存储方式,即可以根据上述 方式快速的确定出需要更新的数据的顶点索引,通过该方式可以大大减少数 据更新量,有效提升图形渲染的效率。

本实施例中,确定更新时的顶点固定数据VB2的方式为:判断所述此次 粒子更新的次数是否大于粒子的绘制段数,若否,则此次粒子更新时的顶点 固定数据VB2的起始索引B为所述索引范围A的起始索引,若是,则此次粒 子更新时的顶点固定数据VB2的起始索引B为所述索引范围A的起始索引加 上C,其中,C=2×粒子的数量×粒子的绘制段数。

当更次次数小于或等于粒子的绘制段数时,粒子的顶点位置与顶点固定 数据即顶点UV是一一对应的,因此,在后续数据合并时,只需要将确定出需 要更新的顶点位置坐标数据与顶点固定数据直接组合即可;而当更新次数大 于粒子的绘制段数时,此时更新时对应的顶点固定数据需要通过设置偏移完 成顶点固定数据的更新,而该偏移即为上述C。例如,粒子的绘制段数为4, 在第一次更新时,对应的顶点固定数据为0-0.25,第二次更新对应的为 0.25-0.5,第三次对应的为0.5-0.75,第四次为0.75-1.0,如图3所示。在 进行第五次更新时,对应的应该为1.0-0.0,而不是直接回到第一段对应的 0.0-0.25,因此,存储偏移,而该偏移对应到顶点固定数据存储时设置的索 引上即为上述C。

步骤S4:完成粒子顶点固定数据和顶点变化数据的更新。

步骤S5:合并更新后的顶点固定数据和顶点变化数据,得到更新后的顶 点数据。

在步骤S3中确定出需要更新的顶点数据的范围后,根据粒子当前的顶点 位置坐标、此次更新后的顶点位置坐标、粒子宽度和确定出的需要更新的顶 点变化数据VB1进行顶点变化数据VB1的更新,并根据确定出的更新时的顶 点固定数据VB2进行此次更新时的顶点固定数据VB2的更新;之后,按照粒 子的顺序合并更新后的顶点变化数据VB1和更新时的顶点固定数据VB2,得 到更新后的粒子的顶点数据。

其中,数据的合并可以通过DirectX或OpenGL的接口合并VB1和VB2, 并设置顶点索引(顶点位置坐标的索引),合并后通设置渲染引擎shader进 行绘制。根据粒子更新后的顶点数据,进行粒子的绘制及渲染的过程为现有 技术,在此不再一一描述。

在实际的绘制中,绘制的每段有2个三角形,4个顶点,假设有 v0,v1,v2,v34个顶点,v0,v1坐标朝向完全一样,v0的U坐标为0.0,v1 的U坐标为1.0。由于绘制的方向与朝向垂直,根据朝向可计算出绘制的方 向向量,由粒子宽度和绘制的方向可得到v1对于v0的偏移距离,加上v0即 可计算出v1的坐标。v2,v3和v0,v1类似。通过宽度和朝向可计算出v3的 坐标。本发明实施例中,通过巧妙的设置顶点变化数据和顶点固定数据的存 储方式,可以大大较少数据更新量,提高更新效率。

此外,在实际应用中,在更新过程中,需要遍历粒子系统中所有粒子, 对所有粒子进行监控,以判断粒子是否死亡。具体通过遍历粒子系统中所有 粒子,判断粒子的存在时间是否大于设定时间,若是则判断粒子死亡;遍历 粒子系统中所有粒子,判断粒子的速度是否大于设定速度,若是则判断粒子 死亡;遍历粒子系统中所有粒子,判断粒子所在区域是否超出设定区域,若 是则判断粒子死亡。当粒子死亡后,该粒子所对应的顶点数据为无效数据, 并生成新的粒子,粒子死亡后下一次的顶点变化数据为新的粒子的顶点变化 数据。

本发明实施例提供的更新方法,适用于粒子系统更新循环过程中需要对 粒子顶点数据进行更新的所有应用场景中,尤其适用于粒子系统中拖尾效果 的绘制,通过该方法进行拖尾效果绘制时数据的更新,能够高效地实现拖尾 算法。

下面结合具体实施例对本发明的方法进行进一步说明。

实施例

本实施例中,将本发明提供的粒子顶点数据的更新方法应用于拖尾效果 的绘制中。

第一步:确定当前粒子系统中待绘制的拖尾效果所需粒子的相关参数,

本实施例中,当前粒子系统所需的粒子数量为4个、粒子宽度即粒子的 直径为0.5,粒子的绘制段数为4段,粒子类型选用三角形,在渲染阶段每 个粒子用经过纹理映射的四边形进行渲染,也就是说,每个粒子的每段需要 2个三角形,两个三角形共用2个顶点,渲染阶段选用的贴图可以是一张tga 图片。

第二步:根据所述相关参数进行粒子系统的初始化,包括:

粒子发射器根据第一步中确定的参数,生成4个粒子,并设置4个粒子 的每一段的顶点数据存储方式。初始化后的4个粒子的顶点固定数据VB2即 顶点纹理坐标UV的存储如下:

第一部分:

(0.0,0.0)(0.0,1.0)

(0.0,0.0)(0.0,1.0)

(0.0,0.0)(0.0,1.0)

(0.0,0.0)(0.0,1.0)4个粒子的第一段的起始UV;

(0.25,0.0)(0.25,1.0)

(0.25,0.0)(0.25,1.0)

(0.25,0.0)(0.25,1.0)

(0.25,0.0)(0.25,1.0)4个粒子的第一段的结束UV即第二段 的起始UV;

(0.50,0.0)(0.50,1.0)

(0.50,0.0)(0.50,1.0)

(0.50,0.0)(0.50,1.0)

(0.50,0.0)(0.50,1.0)第二段的结束UV即第三段的起始UV;

(0.75,0.0)(0.75,1.0)

(0.75,0.0)(0.75,1.0)

(0.75,0.0)(0.75,1.0)

(0.75,0.0)(0.75,1.0)第三段的结束UV即第四段的起始UV;

(1.0,0.0)(1.0,1.0)

(1.0,0.0)(1.0,1.0)

(1.0,0.0)(1.0,1.0)

(1.0,0.0)(1.0,1.0)第四段的结束UV

第二部分:

(0.0,0.0)(0.0,1.0)

(0.0,0.0)(0.0,1.0)

(0.0,0.0)(0.0,1.0)

(0.0,0.0)(0.0,1.0)

(0.25,0.0)(0.25,1.0)

(0.25,0.0)(0.25,1.0)

(0.25,0.0)(0.25,1.0)

(0.25,0.0)(0.25,1.0)

(0.50,0.0)(0.50,1.0)

(0.50,0.0)(0.50,1.0)

(0.50,0.0)(0.50,1.0)

(0.50,0.0)(0.50,1.0)

(0.75,0.0)(0.75,1.0)

(0.75,0.0)(0.75,1.0)

(0.75,0.0)(0.75,1.0)

(0.75,0.0)(0.75,1.0)

(1.0,0.0)(1.0,1.0)

(1.0,0.0)(1.0,1.0)

(1.0,0.0)(1.0,1.0)

(1.0,0.0)(1.0,1.0)

对于4个粒子,由于每个粒子的每段顶点位置坐标数据都存储两次,因 此需要4个粒子、每个粒子绘制4段时,按照存储的顺序设置索引时,需要 的索引个数为:2×粒子个数×(段数+1)=40。顶点朝向可以根据粒子的顶 点位置坐标得到。顶点位置坐标数据的存储格式如下:

V11 V11 V21 V21 V31 V31 V41 V41 索引[0,7]

V12 V12 V22 V22 V32 V32 V42 V42 索引[8,15]

V13 V13 V23 V23 V22 V22 V43 V43 索引[16,23]

V14 V14 V24 V24 V34 V34 V44 V44 索引[24,31]

V15 V15 V25 V25 V35 V35 V45 V45 索引[32,39]

其中,V11和V12表示第一个粒子第一段的起始的和结束的顶点位置坐标 数据,两个V11分别表示左侧和右侧的起始的顶点位置坐标数据,V11、V11、 v12和V12对应的四个顶点位置坐标数据在渲染阶段被绘制为一个四边形。索 引[0,7]为数据V11、V11、V21、V21、V31、V31、V41、V41的索引。

采用上述方式对粒子顶点位置坐标数据进行存储,其中,共40个顶点位 置坐标数据,本实施例中,可以采用数组方式存储上述数据,数组的长度为 40,数组记为V[40],其中,v[0]对应第一个存储的顶点位置坐标数据(上 述第一个V11),v[39]对应最后一个存储的顶点位置坐标数据(上述第二个 V45)。

第三步,更新粒子的顶点数据,包括更新粒子的顶点变化数据VB1和确 定更新时的顶点固定数据VB2;

其中,对于粒子的顶点变化数据VB1,更新过程如下:

假设第一次更新时,四个粒子的各顶点位置坐标数据分别为(1,0, 0),(2,0,0),(3,0,0),(4,0,0),即:

v[0]=v[1]=(1,0,0)  1个历史位置

v[2]=v[3]=(2,0,0)  1个历史位置

v[4]=v[5]=(3,0,0)  1个历史位置

v[6]=v[7]=(4,0,0)  1个历史位置

由于是第一次更新,在此次更新之前每个粒子都没有历史位置数据,两 个顶点位置坐标无法绘制成一个三角形,因此,此时还无法进行拖尾效果的 绘制。此次更新完成后,每个粒子存在一个历史位置数据。如图4-图7中的 A所示。在实际应用中,粒子的顶点位置坐标数据是三维的即XYZ三个反向 均有数据,本实施例中,只是为了描述的方便,才将四个粒子的顶点位置坐 标的Z轴坐标均设置为了0。

假设第二次更新时各粒子的顶点位置坐标数据为:(1.1,0),(2,1,0), (3,1,0),(4,1,0),即

v[8]=v[9]=(1,1,0)    2个历史位置

v[10]=v[11]=(2,1,0)  2个历史位置

v[12]=v[13]=(3,1,0)  2个历史位置

v[14]=v[15]=(4,1,0)  2个历史位置

本次更新后可以开始绘制及渲染,根据第一个粒子的v[0],v[8]及粒子 宽度,可以计算出第一个粒子的v[1],v[9],v[0]、v[1]、v[8]、v[9]4 个顶点构成2个三角形进行绘制,绘制得到一个四边形。其余3个粒子类似。 更新完成后:

第1个粒子的位置信息(1,0,0),(1,1,0)

第2个粒子的位置信息(2,0,0),(2,1,0)

第3个粒子的位置信息(3,0,0),(3,1,0)

第4个粒子的位置信息(4,0,0),(4,1,0)

此次更新后,4个粒子绘制后的轨迹示意图如图4-图7中的B所示。

之后,进行第三次更新时,假设第三个粒子死亡,重新生成了1个新的 粒子,各粒子的位置坐标数据为(2,2,0),(3,2,0),(0,2,0),(5,2, 0),即此时:

v[16]=v[17]=(2,2,0)  3个历史位置

v2[18]=v[19]=(3,2,0)  3个历史位置

v[20]=v[21]=(0,2,0)  1个历史位置

v[22]=v[23]=(5,2,0)  3个历史位置

本次更新后进行绘制及渲染,根据第一个粒子的v[16]及粒子宽度,可 以计算出第一个粒子的v[17],v[8]、v[9]、v[16]、V[17]4个顶点构 成2个三角形进行绘制,绘制得到一个四边形。其余第2个和第4个粒子类 似。第三个粒子由于是重新生成的1个粒子,因此没有历史位置信息,无法 进行绘制。更新完成后:

第1个粒子的位置信息 (1,0,0),(1,1,0),(2,2,0)

第2个粒子的位置信息 (2,0,0),(2,1,0),(3,2,0)

第3个粒子的位置信息 无效坐标,无效坐标,(0,2,0)

第4个粒子的位置信息 (4,0,0),(4,1,0),(5,4,0)

此次更新后,4个粒子绘制后的轨迹示意图如图4-图7中的C所示。

进行第四次更新时,假设第一个粒子死亡,重新生成了1个粒子替代了 第1个粒子。各粒子的位置坐标数据为(0,1,0),(3,4,0),(0,4,0), (5,4,0),即此时:

v2[24]=v2[25]=(0,1,0)  1个历史位置

v2[26]=v2[27]=(3,4,0)  4个历史位置

v2[28]=v2[29]=(0,4,0)  2个历史位置

v2[30]=v2[31]=(5,2,0)  4个历史位置

更新后,第1个粒子的位置信息  无效坐标,无效坐标,无效坐标, (0,1,0)

第2个粒子的位置信息  (2,0,0),(2,1,0),(3,2,0),(3,4,0)

第3个粒子的位置信息  无效坐标,无效坐标,(0,2,0),(0,4, 0)

第4个粒子的位置信息  (4,0,0),(4,1,0),(5,2,0),(5,4,0)

此次更新后,4个粒子绘制后的轨迹示意图如图4-图7中的D所示。

进行第五次更新时,假设第二个粒子死亡。各粒子的顶点位置坐标为(0, 4,0),(0,0,0),(0,7,0),(4,6,0),即此时:

v[32]=v[33]=(0,4,0)  2个历史位置

v[34]=v[35]=(0,0,0)  0个历史位置

v[36]=v[28]=(0,7,0)  3个历史位置

v[38]=v[39]=(4,6,0)  5个历史位置

完成更新后,第1个粒子的位置信息  无效坐标,无效坐标,无效 坐标,(0,1,0),(0,4,0)

第2个粒子的位置信息  无效坐标,无效坐标,无效坐标,无效坐 标,无效坐标

第3个粒子的位置信息  无效坐标,无效坐标,(0,2,0),(0,4,0), (0,7,0)

第4个粒子的位置信息  (4,0,0),(4,1,0),(5,2,0),(5,4,0), (4,6,0)

此次更新后,4个粒子绘制后的轨迹示意图如图4-图7中的E所示。

因为只有4段,当第5次更新时,已经有了4段所有的数据。第6次更 新时,覆盖掉[0,9]的数据,只保留最新的4段数据。当更新次数大于段数+1 时,覆盖存在时间最长的数据。即,把数据分成m段,从左到右进行更新数 据。当到达尾部时,再回到第一段数据进行更新。

之后,遍历系统中粒子,根据粒子已经存在的时间是否大于最大时间, 粒子速度是否大于最多速度,粒子是否超出了固定的区域等判断粒子是否死 亡,如果粒子已经死亡,不做任何操作,如果粒子依旧没有死亡,对锁定的 顶点进行更新,更新信息包括位置,和朝向,位置为当前粒子的位置。朝向 为当前顶点上次更新时的位置到现在的位置的方向。如果是第一次更新,没 有上次位置信息,朝向使用当前粒子的速度的方向。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本 发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要 求及其同等技术的范围之内,则本发明也意图包含这些改动和变型在内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号