一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种粒子渲染方法及装置与流程

2023-04-11 02:01:02 来源:中国专利 TAG:


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.作为本公开实施例一种可选的实施方式,所述处理单元,还用于在所述计算单元获取所述第一位置之后,获取第一深度值和第二深度值,所述第一深度值为屏幕空间中所述第一位置的深度值,所述第二深度值为所述屏幕空间中所述第一位置对应的场景的深度值,判断所述第一深度值是否大于所述第二深度值,若是,则将所述目标粒子状态信息更新为用于指示所述目标粒子已发生碰撞的第二状态信息,并将所述下落时长保存为所述目标粒子的碰撞时间,所述碰撞时间用于指示所述目标粒子在发生碰撞前的下落时长。
43.作为本公开实施例一种可选的实施方式,所述处理单元,还用于在所述状态信息为用于指示所述目标粒子已发生碰撞的第二状态信息的情况下,获取所述目标粒子的碰撞位置,所述碰撞位置用于指示所述目标粒子发生碰撞时的位置;
44.所述渲染单元,还用于将所述目标粒子渲染至所述碰撞位置处。
45.作为本公开实施例一种可选的实施方式,所述处理单元,还用于在所述计算单元获取所述第一位置之后,获取第一深度值和第二深度值,所述第一深度值为屏幕空间中所述第一位置的深度值,所述第二深度值为所述屏幕空间中所述第一位置对应的场景的深度值,判断所述第一深度值是否大于所述第二深度值,若是,则将所述目标粒子状态信息更新为用于指示所述目标粒子已发生碰撞的第二状态信息,并将所述第一位置保存为所述目标粒子的碰撞位置,所述碰撞位置用于指示所述目标粒子发生碰撞时的位置。
46.作为本公开实施例一种可选的实施方式,所述处理单元,具体用于根据所述第一位置在局部空间中的坐标值和模型矩阵,获取所述第一位置在世界空间中的坐标值;根据所述第一位置在世界空间中的坐标值和观察矩阵,获取所述第一位置在视图空间中的坐标值;根据所述第一位置在视图空间中的坐标值和投影矩阵,获取所述第一位置在裁剪空间中的坐标值;对所述第一位置在裁剪空间中的坐标值进行归一化处理,获取所述第一位置在屏幕空间中的坐标值;根据所述第一位置在屏幕空间中的坐标值获取所述第一深度值。
47.作为本公开实施例一种可选的实施方式,所述处理单元,还用于当所述目标粒子的下落时长达到阈值时长时,控制所述目标粒子返回初始位置,将所述目标粒子的下落时长清零,且将所述目标粒子的状态信息更新为所述第一状态信息。
48.第三方面,本公开实施例提供一种电子设备,包括:存储器和处理器,所述存储器用于存储计算机程序;所述处理器用于在执行计算机程序时,使得所述电子设备实现上述任一实施例所述的粒子渲染方法。
49.第四方面,本公开实施例提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,当所述计算机程序被计算设备执行时,使得所述计算设备实现上述任一实施例所述的粒子渲染方法。
50.第五方面,本公开实施例提供一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得所述计算机实现上述任一实施例所述的粒子渲染方法。
51.本公开实施例提供的粒子渲染方法先获取目标粒子的状态信息,并在所述状态信息为用于指示所述目标粒子未发生碰撞的第一状态信息的情况下,获取所述目标粒子的下落时长,然后再根据所述下落时长和所述目标粒子的下落速度,获取第一位置,然后将所述目标粒子渲染至所述第一位置处。即,本公开实施例提供的粒子渲染方法为粒子添加了状态信息,并可以通过粒子的状态信息指示粒子是否发生了碰撞,且在状态信息指示粒子未发生碰撞时,直接根据粒子的下落时长和粒子的下落速度计算粒子的位置,并将粒子渲染计算得到的位置处。由于本公开实施例提供的粒子渲染方法可以通过粒子的状态信息确定粒子是否发生了碰撞,因此本公开实施例提供的粒子渲染方法无需在每一个图像帧对应的时刻时根据粒子运动轨迹和渲染场景中物体的位置确定粒子是否发生了碰撞,因此发明实施例提供的粒子渲染方法可以减少获取粒子位置的计算量,进而降低粒子渲染的计算量并提升计算效率。
附图说明
52.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
53.为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
54.图1为本公开实施例提供的粒子渲染方法的步骤流程图之一;
55.图2为本公开实施例提供的粒子渲染方法的步骤流程图之二;
56.图3为本公开实施例提供的粒子渲染方法的步骤流程图之三;
57.图4为本公开实施例提供的空间转换示意图;
58.图5为本公开实施例提供的粒子渲染装置的结构示意图;
59.图6为本公开实施例提供的电子设备的硬件结构示意图。
具体实施方式
60.为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
61.在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
62.在本公开实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本公开实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。此外,在本公开实施例的描述中,除非另有说明,“多个”的含义是指两个或两个以上。
63.基于上述内容,本公开实施例提供了一种粒子渲染方法,参照图1所示,该粒子渲染方法包括如下步骤:
64.s101、获取目标粒子的状态信息。
65.具体的,本公开实施例中的状态信息为用于指示粒子的碰撞状态的信息,本公开实施例中的状态信息包括两种,一种为指示粒子未发生碰撞的第一状态信息,另一种为指示粒子发生了碰撞的第二状态信息。
66.示例性的,可以通过预设数量的比特位所携带的值作为目标粒子的状态信息。例如:可以以一个比特位的值作为目标粒子的状态信息,当该比特位的值为0时,表示目标粒子未发生碰撞;当该比特位的值为1时,表示目标粒子发生了碰撞。
67.需要说明的是,目标粒子发生了碰撞可以是目标粒子与渲染场景中的地面发生碰撞,也可以是目标粒子与渲染场景中的其它物体发生碰撞,本公开实施例对此不做限定。
68.s102、在所述状态信息为用于指示所述目标粒子未发生碰撞的第一状态信息的情况下,获取所述目标粒子的下落时长。
69.示例性的,目标粒子的下落时长可以根据目标粒子的起始下落时刻和当前时刻获取。其中,目标粒子的起始下落时刻可以为上一次将目标粒子的下落时长清零的时刻。例如:上一次将目标粒子的下落时长清零的时刻为t0,当前时刻为t1,则目标粒子的下落时长为t1-t0。
70.示例性的,目标粒子的下落时长还可以根据当前待渲染的图像帧获取。例如:当前渲染的图像帧为第30个图像帧,图像帧的刷新频率为60hz/s,则粒子的下落时长为0.5秒。
71.s103、根据所述下落时长和所述目标粒子的下落速度,获取第一位置。
72.本公开实施例中目标粒子的下落速度可以由用户根据粒子的类型预设定。需要说明的是,目标粒子可以以预设速度匀速下落,也可以预设加速度和预设初始速度加速下落,还可以也可以预设加速度和预设初始速减速下落。
73.需要说明的是,根据所述下落时长和所述目标粒子的下落速度仅仅可以获取目标粒子在竖直方向上的位置坐标,若需要确定目标粒子在三维空间中的位置,还需要获取目标粒子在水平面内的位置坐标。作为本公开实施例一种可选的实施方式为:获取目标粒子在水平面内的位置坐标的实现方式可以包括:根据目标粒子的初始位置坐标获取目标粒子在水平面内的位置坐标。即,控制目标粒子在竖直方向上下落,目标粒子在水平面内的位置坐标始终与初始位置相同。
74.s104、将所述目标粒子渲染至所述第一位置处。
75.本公开实施例提供的粒子渲染方法先获取目标粒子的状态信息,并在所述状态信息为用于指示所述目标粒子未发生碰撞的第一状态信息的情况下,获取所述目标粒子的下落时长,然后再根据所述下落时长和所述目标粒子的下落速度,获取第一位置,然后将所述目标粒子渲染至所述第一位置处。即,本公开实施例提供的粒子渲染方法为粒子添加了状态信息,并可以通过粒子的状态信息指示粒子是否发生了碰撞,且在状态信息指示粒子未发生碰撞时,直接根据粒子的下落时长和粒子的下落速度计算粒子的位置,并将粒子渲染计算得到的位置处。由于本公开实施例提供的粒子渲染方法可以通过粒子的状态信息确定粒子是否发生了碰撞,因此本公开实施例提供的粒子渲染方法无需在每一个图像帧对应的时刻时根据粒子运动轨迹和渲染场景中物体的位置确定粒子是否发生了碰撞,因此发明实
施例提供的粒子渲染方法可以减少获取粒子位置的计算量,进而降低粒子渲染的计算量并提升计算效率。
76.本公开实施例还提供了另一种粒子渲染方法,参照图2所示,该粒子渲染方法包括:
77.s201、获取目标粒子的状态信息。
78.同上,本公开实施例中的状态信息为用于指示粒子的碰撞状态的信息,本公开实施例中的状态信息包括两种,一种为指示粒子未发生碰撞的第一状态信息,另一种为指示粒子发生了碰撞的第二状态信息。
79.s202、根据所述状态信息确定所述目标粒子是否发生了碰撞。
80.具体的,上述步骤s202(根据所述状态信息确定所述目标粒子是否发生了碰撞)的实现方式为:当所述状态信息为用于指示所述目标粒子未发生碰撞的第一状态信息时,确定目标粒子未发生碰撞,当所述状态信息为用于指示所述目标粒子已发生碰撞的第二状态信息时,确定所述目标粒子发生了碰撞。
81.在上述步骤s202中,若确定所述目标粒子未发生碰撞,则执行如下步骤s203至s208。
82.s203、获取所述目标粒子的下落时长。
83.s204、根据所述下落时长和所述目标粒子的下落速度,获取第一位置。
84.s205、将所述目标粒子渲染至所述第一位置处。
85.上述步骤s203至s205的实现方式及解释说明请参照图1所示实施例中的步骤s102至s104的实现方式及解释说明,在此不再赘述。
86.s206、获取第一深度值和第二深度值。
87.其中,所述第一深度值为屏幕空间中所述第一位置的深度值,所述第二深度值为所述屏幕空间中所述第一位置对应的场景的深度值。
88.本公开实施例中位置的深度值用于表征屏幕空间中的某一位置距离相机的远近。例如:第一位置的深度值则用于表征屏幕空间中的第一位置到相机的距离值。
89.本公开实施例中位置对应的场景的深度值用于表征屏幕空间中该位置对应的渲染场景距离相机的距离值。
90.s207、判断第一深度值是否大于第二深度值。
91.在上述步骤s207中,若所述第一深度值大于所述第二深度值,则执行如下步骤s208,若所述第一深度值小于或等于所述第二深度值,则确定粒子未发生碰撞,无需对状态信息进行更新,粒子继续下落,本次渲染流程结束。
92.s208、将所述目标粒子状态信息更新为所述第二状态信息,并将所述下落时长保存为所述目标粒子的碰撞时间。
93.其中,所述碰撞时间用于指示所述目标粒子在发生碰撞前的下落时长。
94.一方面,上述实施例可以获取目标粒子所在位置的深度值和目标粒子所在位置对应的场景深度,并基于目标粒子所在位置的深度值和目标粒子所在位置对应的场景深度判断目标粒子是否发生了碰撞。即,上述实施例提供了一种基于深度值检测粒子是否发生了碰撞的实现方式,相比于根据粒子运动轨迹和渲染场景中物体的位置检测粒子是否发生了碰撞,基于深度值检测粒子是否发生了碰撞可以减少检测粒子是否发生了碰撞时的计算
量。
95.另一方面,由于上述实施例在确定目标粒子发生了碰撞后,可以将所述目标粒子状态信息更新为用于指示目标粒子已发生碰撞的第二状态信息,且将目标粒子的下落时长保存为用于指示所述目标粒子在发生碰撞前的下落时长的碰撞时间,因此在后续渲染过程中可以直接根据碰撞时间计算目标粒子的碰撞位置,无需再先检测目标粒子是否发生了碰撞,再计算目标粒子的碰撞位置,因此上述可以进一步减少渲染目标粒子时的计算量。
96.在上述步骤s202中,若确定所述目标粒子发生了碰撞(所述状态信息为用于指示所述目标粒子已发生碰撞的第二状态信息),则执行如下步骤s209至s211。
97.s209、获取所述目标粒子的碰撞时间。
98.其中,所述碰撞时间用于指示所述目标粒子在发生碰撞前的下落时长。
99.s210、根据所述碰撞时间和所述目标粒子的下落速度,获取第二位置。
100.需要说明的是,第二位置即为目标粒子发生碰撞时的位置。
101.设:碰撞时间为t、目标粒子的下落速为:u
vel
、第二位置为:pos.y,则第二位置pos.y=t*u
vel

102.s211、将所述目标粒子渲染至所述第二位置处。
103.由于目标粒子发生碰撞后继会停留在第二位置处,因此将所述目标粒子渲染至所述第二位置处可以使目标粒子的运动符合真实世界中粒子的运动轨迹,进而提升粒子渲染的真实感。
104.本公开实施例还提供了另一种粒子渲染方法,参照图3所示,该粒子渲染方法包括:
105.s301、获取目标粒子的状态信息。
106.s202、根据所述状态信息确定所述目标粒子是否发生了碰撞。
107.具体的,上述步骤s302(根据所述状态信息确定所述目标粒子是否发生了碰撞)的实现方式为:当所述状态信息为用于指示所述目标粒子未发生碰撞的第一状态信息时,确定目标粒子未发生碰撞,当所述状态信息为用于指示所述目标粒子已发生碰撞的第二状态信息时,确定所述目标粒子发生了碰撞。
108.在上述步骤s302中,若确定所述目标粒子未发生碰撞(所述状态信息为第一状态信息),则执行如下步骤s303至s308。
109.s303、获取所述目标粒子的下落时长。
110.s304、根据所述下落时长和所述目标粒子的下落速度,获取第一位置。
111.s305、将所述目标粒子渲染至所述第一位置处。
112.上述步骤s303至s305的实现方式及解释说明请参照图1所示实施例中的步骤s102至s104的实现方式及解释说明,在此不再赘述。
113.s306、获取第一深度值和第二深度值。
114.其中,所述第一深度值为屏幕空间中所述第一位置的深度值,所述第二深度值为所述屏幕空间中所述第一位置对应的场景的深度值。
115.本公开实施例中位置的深度值用于表征屏幕空间中的某一位置距离相机远近。例如:第一位置的深度值则用于表征屏幕空间中的第一位置到相机的距离值。
116.本公开实施例中位置对应的场景的深度值用于表征屏幕空间该位置对应的渲染
背景距离相机的距离值。
117.s307、判断所述第一深度值是否大于所述第二深度值。
118.在上述步骤s307中,若所述第一深度值大于所述第二深度值,则执行如下步骤s308,若所述第一深度值小于或等于所述第二深度值,则本次渲染流程结束。
119.s308、将所述目标粒子状态信息更新为所述第二状态信息,并将所述第一位置保存为所述目标粒子的碰撞位置。
120.其中,所述碰撞位置用于指示所述目标粒子发生碰撞时的位置。
121.一方面,上述实施例可以获取目标粒子所在位置的深度值和目标粒子所在位置对应的场景深度,并基于目标粒子所在位置的深度值和目标粒子所在位置对应的场景深度判断目标粒子是否发生了碰撞。即,上述实施例提供了一种基于深度值检测粒子是否发生了碰撞的实现方式,相比于根据粒子运动轨迹和渲染场景中物体的位置检测粒子是否发生了碰撞,基于深度值检测粒子是否发生了碰撞可以减少检测粒子是否发生了碰撞时的计算量。
122.另一方面,由于上述实施例在确定目标粒子发生了碰撞后,可以将第一位置保存为用于指示所述目标粒子发生碰撞时的位置的碰撞位置,因此后续渲染过程中,直接根据碰撞位置对目标粒子进行渲染即可,无需再根据目标粒子的运动时长、运动轨迹等判断目标粒子是否发生了碰撞,也无需再计算获取目标粒子的碰撞位置,因此上述可以进一步减少渲染目标粒子时的计算量。
123.在上述步骤s302中,若所述状态信息为用于指示所述目标粒子已发生碰撞的第二状态信息,则执行如下步骤s309至s310。
124.s309、获取所述目标粒子的碰撞位置。
125.其中,所述碰撞位置用于指示所述目标粒子发生碰撞时的位置。
126.s310、将所述目标粒子渲染至所述碰撞位置处。
127.由于目标粒子发生碰撞后继会停留在碰撞位置处,因此将所述目标粒子渲染至所述碰撞位置处可以使目标粒子的运动符合真实世界中粒子的运动轨迹,进而提升粒子渲染的真实感。
128.图3所示实施例与图2所示实施例的不同之处在于,图2所示实施例中保存的是目标粒子的碰撞时间,而图3所示实施例中保存的是目标粒子的碰撞位置。在保存目标粒子的碰撞时间的情况下,进行渲染时还需要进一步根据碰撞时间和下落速度计算碰撞位置,但时间信息数据量较小易于保存。在保存目标粒子的碰撞位置的情况下,可以直接根据碰撞位置进行粒子的渲染,无需进行额外的计算,但位置信息数据量较大,需要的存储空间较大。实际使用过程中可以根据实际需求选择图2或图3所示实施例提供的粒子渲染方法进行粒子的渲染。
129.作为本公开实施例一种可选的实施方式,上图2、图3所示实施例中的步骤s206/s306(获取第一深度值)的实现方式可以包括如下步骤:
130.步骤a、根据所述第一位置在局部空间中的坐标值和模型矩阵,获取所述第一位置在世界空间中的坐标值。
131.具体的,本公开实施例中的局部空间是指粒子模型对应的坐标空间。世界空间为用于定义各个模型所在位置的坐标空间。模型矩阵(model matrix)是一种变化矩阵,模型
矩阵能通过对模型移位、缩放、旋转等变换将模型置于世界空间中,因此根据所述第一位置在局部空间中的坐标值和模型矩阵可以获取所述第一位置在世界空间中的坐标值。
132.步骤b、根据所述第一位置在世界空间中的坐标值和观察矩阵,获取所述第一位置在视图空间中的坐标值。
133.具体的,视图空间又称为摄像机空间,是将世界空间转换为用户视野前方的坐标空间而产生的结果,因此视图空间是从相机的视角所观察到的坐标空间。将世界空间转换为用户视野前方的坐标通常是由一系列位移和旋转的变换组合来完成,这些变换组合通常存储在观察矩阵(view matrix)里,因此可以根据所述第一位置在世界空间中的坐标值和观察矩阵可以获取所述第一位置在视图空间中的坐标值。
134.步骤c、根据所述第一位置在视图空间中的坐标值和投影矩阵,获取所述第一位置在裁剪空间中的坐标值。
135.具体的,在渲染系统运行的最后,渲染系统希望所有的点都可以落在一个特定的范围内,这个特征范围外所有的点都应该裁剪掉,被裁剪掉的会被忽略,剩下的坐标则会成为屏幕上可见的片段,屏幕上可见的片段形成的空间即为本公开实施例中的裁剪空间,而用于将视图空间中的坐标值变换为裁剪空间中的坐标值的矩阵称为投影矩阵(projection matrix),因此根据所述第一位置在视图空间中的坐标值和投影矩阵可以获取所述第一位置在裁剪空间中的坐标值。
136.步骤d、对所述第一位置在裁剪空间中的坐标值进行归一化处理,获取所述第一位置在屏幕空间中的坐标值。
137.步骤e、根据所述第一位置在屏幕空间中的坐标值获取所述第一深度值。
138.即,参照图4所示,获取第一深度值的实现过程包括:首先根据模型矩阵将局部空间转换为世界空间,再根据观察矩阵将世界空间转换为视图空间,再根据投影矩阵将视图空间转换为裁剪空间,再对裁剪空间进行归一化处理将裁剪空间转换为屏幕空间,然后将根据所述第一位置在屏幕空间中的坐标值获取所述第一深度值。
139.作为本公开实施例一种可选的实施方式,在上述实施例提供的粒子渲染方法的基础上,本公开实施例提供的粒子渲染方法还包括:
140.当所述目标粒子的下落时长达到阈值时长时,控制所述目标粒子返回初始位置,将所述目标粒子的下落时长清零,且将所述目标粒子的状态信息更新为所述第一状态信息。
141.即,粒子以一定时长为周期,周期性的在渲染场景中下落运动。
142.示例性的,阈值时长可以为1分钟;每间间隔一分钟,控制所述目标粒子返回初始位置,并将所述目标粒子的下落时长清零,且将所述目标粒子的状态信息更新为所述第一状态信息。
143.基于同一发明构思,作为对上述方法的实现,本公开实施例还提供了一种粒子渲染装置,该装置实施例与前述方法实施例对应,为便于阅读,本装置实施例不再对前述方法实施例中的细节内容进行逐一赘述,但应当明确,本实施例中的粒子渲染装置能够对应实现前述方法实施例中的全部内容。
144.本公开实施例提供了一种粒子渲染装置。图5为该粒子渲染装置的结构示意图,如图5所示,该粒子渲染装置500包括:
145.获取单元51,用于获取目标粒子的状态信息;
146.处理单元52,用于在所述状态信息为用于指示所述目标粒子未发生碰撞的第一状态信息的情况下,获取所述目标粒子的下落时长;
147.计算单元53,用于根据所述下落时长和所述目标粒子的下落速度,获取第一位置;
148.渲染单元54,用于将所述目标粒子渲染至所述第一位置处。
149.作为本公开实施例一种可选的实施方式,所述处理单元52,还用于在所述状态信息为用于指示所述目标粒子已发生碰撞的第二状态信息的情况下,获取所述目标粒子的碰撞时间,所述碰撞时间用于指示所述目标粒子在发生碰撞前的下落时长;
150.所述计算单元,还用于根据所述碰撞时间和所述目标粒子的下落速度,获取第二位置;
151.所述渲染单元,还用于将所述目标粒子渲染至所述第二位置处。
152.作为本公开实施例一种可选的实施方式,所述处理单元52,还用于在所述计算单元获取所述第一位置之后,获取第一深度值和第二深度值,所述第一深度值为屏幕空间中所述第一位置的深度值,所述第二深度值为所述屏幕空间中所述第一位置对应的场景的深度值,判断所述第一深度值是否大于所述第二深度值,若是,则将所述目标粒子状态信息更新为用于指示所述目标粒子已发生碰撞的第二状态信息,并将所述下落时长保存为所述目标粒子的碰撞时间,所述碰撞时间用于指示所述目标粒子在发生碰撞前的下落时长。
153.作为本公开实施例一种可选的实施方式,所述处理单元52,还用于在所述状态信息为用于指示所述目标粒子已发生碰撞的第二状态信息的情况下,获取所述目标粒子的碰撞位置,所述碰撞位置用于指示所述目标粒子发生碰撞时的位置;
154.所述渲染单元,还用于将所述目标粒子渲染至所述碰撞位置处。
155.作为本公开实施例一种可选的实施方式,所述处理单元52,还用于在所述计算单元获取所述第一位置之后,获取第一深度值和第二深度值,所述第一深度值为屏幕空间中所述第一位置的深度值,所述第二深度值为所述屏幕空间中所述第一位置对应的场景的深度值,判断所述第一深度值是否大于所述第二深度值,若是,则将所述目标粒子状态信息更新为用于指示所述目标粒子已发生碰撞的第二状态信息,并将所述第一位置保存为所述目标粒子的碰撞位置,所述碰撞位置用于指示所述目标粒子发生碰撞时的位置。
156.作为本公开实施例一种可选的实施方式,所述处理单元52,具体用于根据所述第一位置在局部空间中的坐标值和模型矩阵,获取所述第一位置在世界空间中的坐标值;根据所述第一位置在世界空间中的坐标值和观察矩阵,获取所述第一位置在视图空间中的坐标值;根据所述第一位置在视图空间中的坐标值和投影矩阵,获取所述第一位置在裁剪空间中的坐标值;对所述第一位置在裁剪空间中的坐标值进行归一化处理,获取所述第一位置在屏幕空间中的坐标值;根据所述第一位置在屏幕空间中的坐标值获取所述第一深度值。
157.作为本公开实施例一种可选的实施方式,所述处理单元52,还用于当所述目标粒子的下落时长达到阈值时长时,控制所述目标粒子返回初始位置,将所述目标粒子的下落时长清零,且将所述目标粒子的状态信息更新为所述第一状态信息。
158.基于同一发明构思,本公开实施例还提供了一种电子设备。图6为本公开实施例提供的电子设备的结构示意图,如图6所示,本实施例提供的电子设备包括:存储器61和处理
器62,所述存储器61用于存储计算机程序;所述处理器62用于在执行计算机程序时,使得所述电子设备实现上述实施例提供的粒子渲染方法。
159.本公开实施例还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,当所述计算机程序被计算设备执行时,使得所述计算设备实现上述实施例提供的粒子渲染方法。
160.本公开实施例还提供一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得所述计算机实现上述实施例提供的粒子渲染方法。
161.本领域技术人员应明白,本公开的实施例可提供为方法、系统、或计算机程序产品。因此,本公开可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本公开可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质上实施的计算机程序产品的形式。
162.处理器可以是中央处理单元(central processing unit,cpu),还可以是其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现成可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
163.存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram)。存储器是计算机可读介质的示例。
164.计算机可读介质包括永久性和非永久性、可移动和非可移动存储介质。存储介质可以由任何方法或技术来实现信息存储,信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。根据本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
165.最后应说明的是:以上各实施例仅用以说明本公开的技术方案,而非对其限制;尽管参照前述各实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本公开各实施例技术方案的范围。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表