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

三维流体的展示方法、装置、电子设备及存储介质与流程

2022-08-17 09:07:27 来源:中国专利 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.图1为本公开实施例提供的一种三维流体的展示方法的流程示意图;
29.图2为本公开实施例提供的三维虚拟空间中的网格映射到二维纹理图像的示意图;
30.图3为本公开实施例提供的基础网格和周边网格的位置关系图;
31.图4为本公开实施例提供的网格散度的计算流程图;
32.图5为本公开实施例提供的过渡网格和邻接网格的位置关系示意图;
33.图6为本公开实施例提供的一种三维流体的展示装置的结构示意图;
34.图7为本公开实施例提供的一种电子设备的结构示意图。
具体实施方式
35.下面详细描述本公开的实施例,实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本公开,而不能解释为对本公开的限制。
36.本技术领域技术人员可以理解,除非特意声明,这里使用的单数形式“一”、“一个”和“该”也可包括复数形式。应该进一步理解的是,本公开的说明书中使用的措辞“包括”是指存在特征、整数、步骤、操作、元件和/或组件,但是并不排除存在或添加一个或多个其他特征、整数、步骤、操作、元件、组件和/或它们的组。应该理解,当我们称元件被“连接”或“耦接”到另一元件时,它可以直接连接或耦接到其他元件,或者也可以存在中间元件。此外,这里使用的“连接”或“耦接”可以包括无线连接或无线耦接。这里使用的措辞“和/或”包括一个或更多个相关联的列出项的全部或任一单元和全部组合。
37.为使本公开的目的、技术方案和优点更加清楚,下面将结合附图对本公开实施方式作进一步地详细描述。
38.本公开提供的三维流体的展示方法、装置、电子设备和计算机可读存储介质,旨在解决现有技术的如上技术问题。
39.下面以具体地实施例对本公开的技术方案以及本公开的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本公开的实施例进行描述。
40.本公开实施例中提供了一种三维流体的模拟方法,如图1所示,该方法包括:
41.s101、对展示三维流体的三维虚拟环境进行网格化处理,获得网格集合。
42.应当理解的是,三维流体是在预设的三维虚拟环境中进行展示,本公开的三维流体的展示方法首先对三维虚拟环境进行网格化处理,也即将三维空间划分为若干个立方体结构的网格,获得网格集合,这样操作能够为后续将粒子速度转换为网格速度奠定基础。本公开中的网格为六面体网格,将网格中垂直于z轴的两个面称为底面和顶面,且顶面中任意一个点的z轴坐标大于底面中任意一个点的z轴坐标;将垂直于x轴的两个面称为左侧面和右侧面,且右侧面中任意一个点的x轴坐标大于左侧面中任意一个点的x轴坐标;将垂直于y轴的两个面称为前侧面和后侧面,且后侧面中任意一个点的y轴坐标大于前侧面中任意一个点的y轴坐标。六面体网格共有12条边和8个顶点,相应的,每条边与4个六面体网格接触,每个顶点与8个六面体接触。
43.在将三维虚拟环境划分为网格后,根据网格中每条边的长度可以确定每个网格的三维坐标。本公开可以将每个网格中同时具有x、y和z轴坐标最小分量的顶点的三维坐标作为网格的坐标,除此之外,也可以将网格中心点的坐标作为网格的坐标,或者将网格中同时具有x、y和z轴坐标最大分量的顶点的三维坐标作为网格的坐标,本公开不作进一步的限定。为了叙述方便,本公开后续实施例均以网格中同时具有x、y和z轴最小分量的顶点的三维坐标作为网格的坐标。
44.s102、获得三维流体中各流体粒子在当前帧的三维坐标和速度,并确定各流体粒子所在的网格。
45.应当理解的是,在三维流体的展示过程中至少会存储流体粒子当前帧的三维坐标和速度,当然也可以对三维流体的每一帧的三维坐标和速度进行存储。在获得流体粒子在
当前帧的三维坐标后,结合每个网格的坐标,就可以确定各个流体粒子在当前帧所在的网格。例如某一流体粒子的三维坐标为(5.1,7.2,6.1),由于每个网格的坐标是以同时具有x、y和z轴最小分量的顶点的坐标定义的,并且网格的边长为单位长度,因此可知该流体粒子位于坐标为(5,7,6)的网格内。考虑到如果直接对流体粒子的速度进行更新,由于流体粒子数量堪比海量,会严重影响绘制三维流体的效率,而通过对三维空间进行网格化处理,以数量较少的网格表征海量的流体粒子,通过对网格的速度进行更新,能够大幅降低运算开销,更重要的是,在考虑流体压强对流体的运动产生影响时,利用网格的速度比利用粒子速度进行运算更加准确。
46.s103、对于每个网格,根据每个网格内部以及预设范围内的周边网格内的流体粒子在当前帧的速度,获得每个网格在当前帧的速度。
47.网格本身是固定不变的,实际发生位移的是网格中的流体粒子,本公开对每个粒子设置影响半径,每个粒子的速度、坐标都会对该粒子影响半径内的网格顶点的速度和坐标发生影响,对于每个网格,该网格内部以及预设范围内的周边网格内的流体粒子都作为对该网格产生影响的流体粒子,通过这些产生影响的流体粒子的速度获得该网格在当前帧的速度,从而先对该网格的速度进行更新,再利用更新后的网格的速度更新流体粒子的速度,能够提高流体粒子速度的更新效率。
48.本公开实施例中每个网格的预设范围内的周边网格包括与该网格处于同一平面的周边网格和处于不同平面的周边网格,也就是说,包括了该网格在三维空间内、而不是二维平面内的多个周边网格。
49.可选的,本公开可以将预设范围设定为2,同时网格的边长为单位长度1,那么对于一个网格坐标为(c
x
,cy,cz)的网格而言,其预设范围内的周边网格包括以下坐标的网格:(c
x
,cy,cz)、(c
x
1,cy,cz)、(c
x-1,cy,cz)、(c
x
2,cy,cz)、(c
x-2,cy,cz)、(c
x
,cy 1,cz)、(c
x
,c
y-1,cz)、(c
x
,cy 2,cz)、(c
x
,c
y-2,cz)、(c
x
,cy,cz 1)、(c
x
,cy,c
z-1)、(c
x
,cy,cz 2)、(c
x
,cy,c
z-2)、(c
x
1,cy 1,cz)、(c
x
1,c
y-1,cz)、(c
x
2,cy 1,cz)、(c
x
1,cy 2,cz)。需要注意的是,上述预设范围的具体值仅为示例,本公开实施例对于预设范围的具体大小不作限定,可根据实际情况,例如三维流体划分的网格数量等进行设置。
50.s104、对每个网格在当前帧的速度增加预设方向的加速度,获得每个网格在下一帧的速度。
51.通过对网格在当前帧的速度增加预设方向的加速度,可以使网格顶点在下一帧的速度朝预设方向更新。本公开对外力的施加方向不作具体的限制,例如可以是重力方向在三维虚拟环境中对应的坐标轴的方向。
52.s105、根据每个网格从当前帧至下一帧的速度变化量,对每个网格内的流体粒子的速度进行更新,获得流体粒子在下一帧的速度。
53.本公开发现网格的速度变化能够反应出网格内的粒子的速度变化,因此,使用网格顶点从当前帧至下一帧的速度变化量作为流体粒子的速度变化量,将该速度变化量与流体粒子在当前帧的速度相加,即可获得流体粒子在下一帧的速度。
54.通过利用网格的速度更新流体粒子的速度,为后续确定流体粒子在下一帧的三维坐标奠定基础。
55.s106、根据流体粒子在下一帧的速度以及在当前帧的三维坐标,获得流体粒子在
下一帧的三维坐标。
56.本公开可以根据流体粒子在下一帧的速度与时间步长的乘积,获得流体粒子从当前帧到下一帧的时间内发生的位移,然后在流体粒子在当前帧的三维坐标上累加该位移,获得流体粒子在下一帧的三维坐标。
57.s107、根据所有流体粒子在下一帧的三维坐标,在三维虚拟环境中展示下一帧的三维流体。
58.通过上述方法可以获取三维流体中所有流体粒子在下一帧的三维坐标,根据流体粒子在下一帧的三维坐标,将流体粒子在三维空间中进行位置更新,即可获得下一帧的三维流体,从而在三维空间中展示下一帧的三维流体。
59.本公开提供的三维流体的展示方法,使用网格来辅助粒子的运动模拟计算,能够较好地处理外力作用和流体压强对流体运动的影响,且额外开销较小。另外,使用网格的速度变化量来更新粒子速度,而不是把网格速度直接换算为粒子速度,能够减少粒子速度转换成网格速度再转换成粒子速度带来的数值耗散。
60.应当理解的是,gpu(graphics processing unit,图形处理器)在进行图像处理时相比cpu(central processing unit,中央处理器)具有明显的优势,但由于gpu只能处理二维图像,而不能直接处理三维图像,因此现有在进行三维流体展示时,往往只利用cpu完成。现有在利用gpu进行三维流体模拟时,仍然需要利用cpu对三维流体数据进行预处理,也即目前尚不存在只利用gpu实现三维流体展示的方法。
61.为了实现只利用gpu实现三维流体的展示方法,在上述各实施例的基础上,作为一种可选实施例,获得流体粒子在下一帧的三维坐标,之后还包括:
62.s108、根据流体粒子在下一帧的三维坐标,将流体粒子映射至下一帧的第一二维纹理图像和第二二维纹理图像,获得流体粒子在下一帧的第一二维纹理图像和第二二维纹理图像中对应的像素点。
63.具体的,流体粒子在二维纹理图像中的横坐标为x width*z,其中x为流体粒子在下一帧的三维坐标的x轴分量,z为流体粒子在下一帧的三维坐标的z轴分量,width为三维空间在z轴方向的宽度。
64.例如,若三维空间的大小为3*4*5,可知三维空间在z轴方向的宽度为5,若一个流体粒子在下一帧的三维坐标为(1,2,3),那么流体粒子映射到二维纹理图像的横坐标为1 5*3=16,纵坐标为2,即流体粒子在二维纹理图像的二维坐标为(16,2)。通过上述方法,所有流体粒子的三维坐标均可以映射到二维纹理图像中,进一步可知,该二维纹理图像的大小为28*4。
65.s109、将流体粒子在下一帧的三维坐标转换成流体粒子在下一帧的第一二维纹理图像中对应的像素点的rgb值;将流体粒子在下一帧的速度转换成流体粒子在下一帧的第二二维纹理图像中对应的像素点的rgb值。
66.由于流体粒子的三维坐标、速度以及rgb值均是三维向量,因此可以根据三维坐标和速度在三轴上的分量直接作为r、g、b的值,例如某流体粒子的三维坐标为(1,2,3),速度为(4,5,6),那么该流体粒子在第一二维纹理图像中的rgb值为:红色通道(r)的值为1,绿色通道(g)的值为2,蓝色通道(b)的值为3,那么该流体粒子在第二二维纹理图像中的rgb值为:红色通道(r)的值为4,绿色通道(g)的值为5,蓝色通道(b)的值为6;应当理解的是,上述
速度中的4、5和6分别表示该流体粒子在x、y和z轴的速度分量。
67.本公开实施例可将流体粒子的三维坐标按照相同的方法映射到两幅二维纹理图像中,之后将流体粒子的三维坐标和速度分别在两幅二维纹理图像中以rgb值进行表征,从而gpu可以直接读取两幅二维纹理图像,通过解析rgb值确定流体粒子的三维坐标和速度,实现完全在gpu上进行三维流体模拟的效果。
68.在上述各实施例的基础上,作为一种可选实施例,获得三维流体中各流体粒子在当前帧的三维坐标和速度,包括:
69.获取当前帧的第一二维纹理图像和第二二维纹理图像;
70.对于第一二维纹理图像中的每个像素点,根据像素点中的rgb值,确定与像素点对应的流体粒子在当前帧的三维坐标;
71.对于第二二维纹理图像中的每个像素点,根据像素点中的rgb值,确定与像素点对应的流体粒子在当前帧的速度。
72.本公开的第一二维纹理图像和第二二维纹理图像中的像素点分别为三维流体的流体粒子在第一二维纹理图像和第二二维纹理图像的映射,第一二维纹理图像和第二二维纹理图像中的像素点的rgb值分别用于表征对应的流体粒子在当前帧的三维坐标和速度。
73.在上述各实施例的基础上,作为一种可选实施例,本公开实施例在获取网格在当前帧的速度时,将网格的周边网格分为与网格处于同一水平面的周边网格和处于不同水平面两种不同的情况,并针对两种不同的情况获得网格在当前帧的速度。之所以这样操作,是因为在将三维空间中的点映射到二维纹理图像时,原本处于同一水平面的两个点在二维纹理图像中的相对位置没有改变,而原本处于不同水平面的两个点在二维纹理图像中的相对位置会发生改变,这就导致不同水平面的流体粒子之间的相互作用在三维空间和二维空间是不同的。
74.请参见图2,其示例性地示出了三维虚拟空间中的网格映射到二维纹理图像的示意图,如图所示,三维虚拟空间中存在8个网格,网格的边长为单位长度,其中包括位于下层的4个网格1~4和位于上层的4个网格5~8,8个网格到二维纹理图像的过程实际上是一个平铺的过程,即将每一层的网格平铺在二维纹理图像,原本2*2*2的三维结构平铺后就成为了4*2的长方形,原本网格1和5在三维空间是直接接触的,但映射到二维纹理图像后,网格1和5之间隔着网格2。
75.基于此,本公开实施例根据每个网格内部以及预设范围内的周边网格内的流体粒子在当前帧的速度,获得每个网格在当前帧的速度,包括:
76.将每个网格作为基础网格,并且,针对每个基础网格,执行如下操作:
77.s201、将每个基础网格内部以及预设范围内的周边网格内的流体粒子作为参考流体粒子,确定参考流体粒子与对应的目标网格的相对位置。
78.本公开在计算每个网格在当前帧的速度时,将每个网格作为基础网格,首先将基础网格内部以及预设范围内周边网格内的流体粒子均作为参考流体粒子,以预设范围为单位长度为例,那么对于每个基础网格,与其同一水平面的8个网格以及处于上、下两个水平面的18个网格,一共26个网格内的流体粒子均属于参考流体粒子。
79.在确定参考流体粒子后,进一步确定参考流体粒子对应的目标网格。本公开根据参考流体粒子所在的网格与基础网格是否处于同一平面,设置了两种目标网格的确定方
式,针对每个基础网格:
80.(1)当基础网格对应的参考流体粒子位于基础网格或者所在的网格与基础网格处于同一水平面时,则参考流体粒子对应的目标网格为参考流体粒子所在的网格;
81.(2)当基础网格对应的参流体粒子所在的网格与基础网格处于不同水平面,则参考流体粒子对应的目标网格为基础网格。
82.参见图3,其示例性地示出了本公开实施例的基础网格和周边网格的位置关系图,如图所示,网格1为基础网格,网格2和网格3均是基础网格1的周边网格,定义x-y平面为水平面,网格2与网格1处于同一水平面,网格3与网格1处于不同的水平面。
83.根据如上规则,对于基础网格1内的参考流体粒子,该参考流体粒子的目标网格即为其所在的网格,即基础网格1;
84.对于与网格1处于同一平面的网格,该网格内的参考流体粒子的目标网格即为该参考流体粒子所在的网格,比如网格2内的参考流体粒子的目标网格即为网格2;
85.对于与网格1处于不同平面的网格,该网格内的参考流体粒子的目标网格即为参考网格1,比如网格3内的参考流体粒子的目标网格即为网格1。
86.在确定每个参考流体粒子的目标网格后,即可根据参考流体粒子的坐标以及目标网格的坐标,确定参考流体粒子和目标网格间的相对位置。例如,本公开可以将目标网格的坐标与参考流体粒子的坐标间的差值定义为参考流体粒子和目标网格间的相对位置。例如,目标网格的坐标为(2,2,2),参考流体粒子的坐标为(3,3,3),则参考流体粒子和目标网格间的相对位置为(1,1,1)。
87.s202、根据相对位置获得参考流体粒子相对于对应的目标网格的权重。
88.相对位置能够表征参考流体粒子与目标网格在每个坐标轴上的远近关系,例如,参考流体粒子更靠近目标网格的垂直于x轴的面,那么可以认为参考流体粒子的速度在x轴的分量对目标网格的速度影响更多,而参考流体粒子的速度在y轴和z轴的分量对目标网格的速度影响更少,基于此,本公开可以将相对位置转换为参考流体粒子相对于目标网格的权重。本公开中的权重可以用向量进行表示,向量中的元素分别对应参考流体粒子对于目标网格的权重在每个坐标轴的分量。
89.s203、根据参考流体粒子在当前帧的速度以及参考流体粒子相对于对应的目标网格的权重,获得参考流体粒子相对于对应的目标网格的速度加权值。
90.本公开可以将参考流体粒子在当前帧的速度与参考流体粒子相对于对应的目标网格的权重的乘积,作为参考流体粒子相对于对应的目标网格的速度加权值。
91.例如,参考流体粒子在当前帧的速度为(v
x
,vy,vz),v
x
,vy,vz分别表示参考流体粒子在当前帧的速度在x轴、y轴和z轴的分量。
92.参考流体粒子相对于对应的目标网格的权重为(w
x
,wy,wz),w
x
,wy,wz分别表示参考流体粒子相对于对应的目标网格的权重在x轴、y轴和z轴的分量。
93.参考流体粒子相对于对应的目标网格的速度加权值为(v
x
*w
x
,vy*wy,vz*wz),其中,*表示乘法运算。
94.s204、根据所有参考流体粒子相对于对应的目标网格的速度加权值之和以及所有参考流体粒子相对于对应的目标网格的权重之和,获得基础网格在当前帧的速度。
95.具体的,本公开在获得所有参考流体粒子对于目标网格的速度加权值后进行求
和,获得总的速度加权值;对所有参考流体粒子对于目标网格的权重进行求和,获得总的权重,将总的速度加权值与总的权重相除,作为网格在当前帧的速度。
96.本公开根据参考流体粒子和对应的目标网格的相对位置确定参考流体粒子与对应的目标网格的权重,利用权重对参考流体子在当前帧的速度进行加权,获得参考流体粒子相对于对应的目标网格的速度加权值,最后根据所有参考流体粒子相对于对应的目标网格的速度加权值之和以及所有参考流体粒子相对于对应的目标网格的权重之和,获得基础网格在当前帧的速度,整个过程充分考虑了参考流体粒子和目标网格的位置关系,使得获得的网格的速度更符合流体在三维空间的运动规律。
97.在上述各实施例的基础上,作为一种可选实施例,根据相对位置获得参考流体粒子对于对应的目标网格的权重,包括:
98.s301、将三维虚拟环境所在坐标系的每一轴作为目标轴,将对应的目标网格中垂直于目标轴方向的一个面作为目标面,获取参考流体粒子与目标面的中间点之间的距离分别在三轴方向上的投影长度。
99.本公开将参考流体粒子在所处网格内的相对位置以参考流体粒子分别与所处网格在x、y和z轴方向的三个面上的中间点之间的距离进行表征。
100.应当理解的是,所有网格选取的x、y和z轴方向的三个面应当是统一的,本公开选择与网格中同时具有x、y和z轴最小分量的顶点接触的三个面,也即,如果网格的三维坐标为(c
x
,cy,cz),也即x、y和z轴最小分量的顶点的三维坐标为(c
x
,cy,cz),同时网格的边长为单位长度1,那么所处网格在x、y和z轴方向的三个面上的中间点可以为:(c
x
,cy 0.5,cz 0.5)、(c
x
0.5,cy,cz 0.5)和(c
x
0.5,cy 0.5,cz),由此可以理解的是,本公开的网格在某一轴方向的面,也即垂直于该轴的面。
101.由于本公开的流体是三维流体,因此在计算权重时,也应对计算每个轴上的权重分量。在计算每个轴上的权重分量时,本公开是以参考流体粒子与所处网格在该轴方向的面的中心点间的距离计算的。
102.例如,在计算x轴上的权重分量时,获取参考流体粒子与所处网格在x方向的面的中心点之间的距离,由于该距离是一个三维空间内两点间的距离,本公开进一步获取该距离在x、y和z轴方向上的投影长度,实际上也即,参考流体粒子的x、y和z轴的坐标值分别与所处网格在x方向的面的中心点的x、y和z轴的坐标值相减,即可获得投影长度。例如,若参考流体粒子的坐标为(a,b,c),而所处网格在x方向的面的中心点的坐标为(e,f,g),则参考流体粒子与所处网格在目标轴方向的面的中间点之间的距离在x、y和z轴方向上的投影长度分别为|a-e|、|b-f|和|c-g|。
103.s302、分别比较三个投影长度与单位长度的差值,获得第一差值、第二差值和第三差值,将第一差值与预设值之间较大的数作为第一参数,将第二差值与预设值之间较大的数作为第二参数,将第三差值与预设值之间较大的数作为第三参数;
104.s303、根据第一参数、第二参数以及第三参数的乘积获得参考流体粒子对于目标网格的权重在目标轴的分量,根据分量获得参考流体粒子对于对应的目标网格的权重。
105.具体的,本公开可以将第一参数、第二参数与第三参数的乘积作为参考流体粒子对于对应的目标网格的权重在目标轴的分量。
106.本公开的步骤s202还可以基于以下公式计算:
107.w=(k(p-c
x
),k(p-cy),k(p-cz));
108.k(u)=h(u
x
)
·
h(uy)
·
h(uz);
109.h(x)=max{0,1-|x|};
110.其中,w表示参考流体粒子p对于目标网格的权重,k(u)表示自变量为u的函数k,k(p-c
x
)表示根据参考流体粒子p与目标网格在x轴方向的面的中间点c
x
获得的参考流体粒子p对于目标网格的权重在x轴的分量,k(p-cy)表示根据参考流体粒子p与目标网格在y轴方向的面的中间点cy获得的参考流体粒子p对于目标网格的权重在y轴的分量,k(p-cz)表示根据参考流体粒子p与目标网格在z轴方向的面的中间点cz获得的参考流体粒子p对于目标网格的权重在z轴的分量,h(u
x
)表示参数u在x轴的分量,h(uy)表示参数u在y轴的分量,h(uz)表示参数u在z轴的分量。h(x)表示自变量为x的函数h。
111.例如,若粒子位置为p(p
x
,py,pz),目标网格三维坐标为c(c
x
,cy,cz),网格在x、y和z轴方向的边界中心点分别为c
x
(c
x
,cy 0.5,cz 0.5),cy(c
x
0.5,cy,cz 0.5),cz(c
x
0.5,cy 0.5,cz);
112.以k(p-c
x
)为例,k(p-c
x
)=h(p
x-c
x
)*h(p
y-c
y-0.5)*h(p
z-c
z-0.5);
113.h(p
x-c
x
)=max{0,1-|p
x-c
x
|};
114.h(p
y-c
y-0.5)=max{0,1-|p
y-c
y-0.5|};
115.h(p
z-cz)=max{0,1-|p
z-c
z-0.5|}。
116.本公开根据参考流体粒子与目标网格在目标轴方向的面的中间点之间的距离获得参考流体粒子对于目标网格的权重在目标轴的分量,根据权重与参考流体粒子在当前帧的速度进一步获得参考流体粒子对于目标网格的速度加权值,然后利用所有参考流体粒子对于目标网格的速度加权值之和以及所有参考流体粒子对于目标网格的权重之和,获得基础网格在当前帧的速度,由于基础网格考虑了一定范围内的参考流体粒子的影响,因此获得的网格的速度的准确性更高。
117.在上述各实施例的基础上,作为一种可选实施例,步骤s104进一步包括:
118.s401、对每个网格在当前帧的速度增加预设方向的加速度,获得每个网格在下一帧的初始速度。
119.例如,定义网格在当前帧的速度为v
t
,外力的加速度为a,时间步长为dt,则下一帧网格的初始速度v
t 1
可以表示为v
t 1
=v
t
a*dt。
120.进一步地,本公开可以设置速度阈值,从而在计算每一帧的初始速度后,将计算出的初始速度与速度阈值进行比较,将两者中的较小值作为下一帧网格的初始速度。通过设置速度阈值,能够使得模拟的三维流体的整体运动更加流畅而不突兀,仿真效果更高。
121.s402、根据每个网格在下一帧的初始速度获得网格的散度。
122.散度(divergence)可用于表征空间各点矢量场发散的强弱程度,在流体力学中密度的变化率等于动量的散度,散度如果是正的,代表矢量场是往外散出的,如果是负的,代表这些矢量场是往内集中的。也就是说,散度表明了向量的流动方向,而这个流动的程度越大,散的越快,那么对应的散度值也就越大。
123.s403、根据网格的散度进行雅各比(jocabi)迭代,获得网格的压强场梯度。
124.具体的,首先初始化每个网格的压强为0,在每次迭代过程中,首先确定该网格上下前后左右六个网格在上一轮迭代的压强,并计算6个压强之和;然后计算6个压强之和与
该网格的散度的差值;将差值除以6,即可获得网格在本轮迭代的压强。本公开对迭代的次数不作具体的限定,例如可以为20次。
125.进一步地,本公开对于没有流体粒子的网格,压强始终设置为0。
126.压强场梯度即沿流体流动(运动)方向,单位路程长度上的压强变化值,通过统计每个网格与其在速度方向上相邻的另一个网格的压强差,即可获得网格的压强场梯度。
127.s404、根据网格在下一帧的初始速度和压强场梯度,获得网格在下一帧的速度。
128.具体的,本公开将网格在下一帧的初始速度减去压强场梯度,即可得到网格在下一帧的速度。
129.本公开在计算初始速度后,进一步计算网格的压强场梯度,并利用初始速度和压强场梯度的差值,获得网格在下一帧的速度,能够使得流体在被施加外力后不至于过于聚集,模拟效果更加真实。
130.在上述各实施例的基础上,作为一种可选实施例,步骤s402包括:
131.s501、对于每个网格顶点,根据网格顶点接触的所有网格在下一帧的初始速度,获得网格顶点在下一帧的初始速度。
132.具体的,由于每个网格顶点接触8个网格,因此将接触的8个网格在下一帧的初始速度的平均值,作为网格顶点在下一帧的初始速度。
133.s502、对于网格的每一面,根据每一面的所有网格顶点在下一帧的初始速度的平均值,作为每一面的速度。
134.在确定每个网格顶点的速度后,考虑到每个面具有4个网格顶点,因此可以将4个网格顶点在下一帧的初始速度的平均值,作为每个面的速度。
135.s503、对于网格中任意的两个相对面,根据两个相对面的速度,获得两个相对面的速度差,根据网格所有相对面的速度差之和,获得网格的散度。
136.参见图4,其示例性地示出了本公开实施例提供的网格散度的计算流程图,如图所示,网格中垂直于x轴的面分别为x1和x2,其中x1上任意一点坐标的x轴分量大于x2上任意一点坐标的x轴分量;垂直于y轴的面分别为y1和y2,其中y1上任意一点坐标的y轴分量大于y2上任意一点坐标的y轴分量;垂直于z轴的面分别为z1和z2,其中z1上任意一点坐标的z轴分量大于z2上任意一点坐标的z轴分量;在获得上述六个面的速度后,分别计算相对的两个面的速度的差值,即计算面x1与面x2的速度的差值dx、面y1与面y2的速度的差值dy、面z1与面z2的速度的差值dz,将dx、dy和dz求和,即可获得该网格的散度。
137.进一步地,本公开在计算散度后,还可以将该散度与预设的最大散度进行比较,若该散度大于预设的最大散度,则将该散度更新为最大散度,若该散度没有大于预设的最大散度,则不需要更新。通过设置最大散度的限制,能够使得模拟的三维流体的膨胀(流体粒子扩散)和压缩(流体粒子凝聚),更符合真实的流体运动效果。
138.在上述各实施例的基础上,根据流体粒子在下一帧的速度以及在当前帧的三维坐标,获得流体粒子在下一帧的三维坐标,包括:
139.s601、根据流体粒子在下一帧的速度、当前帧与下一帧的时差以及流体粒子在当前帧的三维坐标,获得流体粒子的过渡位置。
140.本公开在确定流体粒子在下一帧的位置时,首先会根据流体粒子在下一帧的速度、当前帧与下一帧的时差的一半以及流体粒子在当前帧的三维坐标计算出流体粒子的过
渡位置。过渡位置的目的是为了更平滑地更新流体粒子的位置,从计算过渡位置所需的参量可知,选取当前帧与下一帧的时差(例如,当前帧与下一帧的时差的一半),是为了获取粒子按照流体粒子在下一帧的速度和当前帧的三维坐标运动时,在当前帧对应的时刻到下一帧对应的时刻这一时段内的中间时刻所在的位置。
141.s602、确定流体粒子的过渡位置所在的网格,作为过渡网格。
142.s603、根据过渡网格以及过渡网格在三个坐标轴的延长线上相邻的邻接网格的坐标和速度,获得流体粒子在过渡位置的过渡速度。
143.对于每个流体粒子而言,在确定了流体粒子对应的过渡网格后,利用过渡网格以及过渡网格在三个坐标轴的延长线上相邻的邻接网格的坐标和速度,计算出该流体在过渡位置的过渡速度,过渡速度在速度大小和速度方向上相比下一帧的速度能够更平滑地衔接上一帧的速度,为后续重新根据过渡速度计算流体粒子在下一帧的三维坐标奠定基础。
144.具体地,步骤s603包括:
145.将三维虚拟环境所在坐标系的每一轴作为目标轴,确定过渡网格在目标轴的延长线上相邻的邻接网格,确定过渡网格以及邻接网格垂直于目标轴的目标面。
146.参见图5,其示例性地示出了本公开实施例提供的过渡网格和邻接网格的位置关系示意图,如图所示,本公开实施例中的过渡网格g1具有三个邻接网格,其中邻接网格l1位于过渡网格g1在x轴方向的延长线上,邻接网格l2位于过渡网格g1在y轴方向的延长线上,邻接网格l3位于过渡网格g1在z轴方向的延长线上。
147.根据过渡网格的目标面的网格顶点接触的所有网格在下一帧的速度,获得过渡网格的目标面的第一中心点的速度;根据邻接网格的目标面的网格顶点接触的所有网格在下一帧的速度,获得邻接网格的目标面的第二中心点的速度。
148.本公开在计算目标面的中心点的速度时,采用先计算网格顶点的速度,然后再对目标面上的四个网格顶点的速度取平均值,即可获得目标面的中心点的速度,由上述实施例可知,每个网格顶点的速度是该网格顶点接触的8个网格的速度的平均值。
149.例如,以z轴为例,定义过渡位置为(p
x
,py,pz),过渡网格的坐标为则过渡网格在z轴方向的面(也即垂直于z轴的面)的中心点,即第一中心点为c
z,1
=(c1 0.5,c2 0.5,c3),对于该面上中心点的速度,本公开采用该面上的四个网格顶点在下一帧的速度的平均值进行表征,定义计算出的第一中心点的速度为v
z,1
=(v1,v2,v3)。
150.过渡网格在z轴延长线方向上相邻的邻接网格的坐标为过渡网格在z轴延长线方向上相邻的邻接网格的坐标为则邻接网格在z轴方向的面的中心点,即第二中心点为c
z,2
=(c1 0.5,c2 0.5,c3 1),定义计算出的第二中心点的速度为v
z,1
=(v4,v5,v6)。
151.根据邻接网格的坐标、过渡位置以及过渡网格的坐标在坐标轴的分量和第一中心点和第二中心点的速度在目标轴的分量,获得过渡速度在目标轴的分量,根据过渡速度在所有坐标轴的分量,获得过渡速度。
152.在上述各实施例的基础上,作为一种可选实施例,根据邻接网格的坐标、过渡位置以及过渡网格的坐标在坐标轴的分量和第一中心点和第二中心点的速度在坐标轴的分量,获得过渡速度在坐标轴的分量,包括:
153.首先根据邻接网格和过渡位置的三维坐标在目标轴的分量之差,获得第一权重;根据过渡位置与过渡网格的三维坐标在目标轴的分量之差,获得第二权重;
154.将第一权重与第二中心点的速度在目标轴的分量的乘积作为第一速度,将第二权重与第一中心点的速度在目标轴的分量的乘积作为第二速度,将第一速度与第二速度的和作为流体粒子的过渡速度在目标轴的分量。
155.以z轴为例,本公开可根据以下公式计算流体粒子的过渡速度在z轴的分量vz:
[0156]vz
=(c3 1-pz)*v6 (p
z-c3)*v3[0157]
在该公式中,c3 1-pz为z轴上的邻接网格与过渡位置的三维坐标在z轴的分量之差,也即第一权重;p
z-c3即过渡位置与过渡网格的三维坐标在目标轴的分量之差,也即第二权重;(c3 1-pz)*v6即第一速度,(p
z-c3)*v3即第二速度。
[0158]
通过上述方法即可确定流体粒子的过渡速度在x坐标轴的分量v
x
和在x坐标轴的分量vy,从而流体粒子的过渡速度可以表示为(v
x
,vy,vz)。
[0159]
s604、根据流体粒子的过渡速度、时间步长以及流体在当前帧的三维坐标,获得流体粒子在下一帧的三维坐标。
[0160]
具体的,本公开可以根据流体粒子的过渡速度和时间步长的乘积,获得流体粒子从当前帧至下一帧的位移,然后根据该位移与当前帧的三维坐标相加,即可获得流体粒子在下一帧的三维坐标。进一步根据所有流体粒子在下一帧的三维坐标,在三维虚拟环境中展示下一帧的三维流体。
[0161]
本公开实施例在根据流体粒子在下一帧的速度以及在当前帧的三维坐标,获得流体粒子在下一帧的三维坐标的流程中,首先根据流体粒子在下一帧的速度、相邻两帧的时差以及流体粒子在当前帧的三维坐标,获得流体粒子的过渡位置,能够更平滑地更新流体粒子的位置,根据过渡位置所在的网格在坐标轴延长线上的邻接网格的坐标和速度,进一步获得流体粒子在过渡位置的过渡速度,过渡速度在速度大小和速度方向上相比下一帧的速度能够更平滑地衔接上一帧的速度,之后利用过渡速度计算流体粒子的三维坐标更符合流体的运动特点。
[0162]
根据本公开实施例的三维流体的展示方法,使用网格来辅助粒子的运动模拟计算,能够较好地处理外力作用和流体压强对流体运动的影响,且额外开销较小。另外,使用网格的速度变化量来更新粒子速度,而不是把网格速度直接换算为粒子速度,能够减少粒子速度转换成网格速度再转换成粒子速度带来的数值耗散。
[0163]
本公开实施例提供了一种三维流体的展示装置,如图6所示,该装置可以包括:网格化模块101、基础数据获取模块102、网格速度获取模块103、网格速度更新模块104、粒子速度更新模块105、流体位置更新模块106和展示模块107,具体地:
[0164]
网格化模块101,用于对展示三维流体的三维虚拟环境进行网格化处理,获得网格集合;
[0165]
基础数据获取模块102,用于获得三维流体中各流体粒子在当前帧的三维坐标和速度,并确定各流体粒子所在的网格;
[0166]
网格速度获取模块103,用于对于每个网格,根据每个网格内部以及预设范围内的周边网格内的流体粒子在当前帧的速度,获得每个网格在当前帧的速度;
[0167]
网格速度更新模块104,用于对每个网格在当前帧的速度增加预设方向的加速度,
获得每个网格在下一帧的速度;
[0168]
粒子速度更新模块105,用于根据每个网格从当前帧至下一帧的速度变化量,对每个网格内的流体粒子的速度进行更新,获得流体粒子在下一帧的速度;
[0169]
流体位置更新模块106,用于根据流体粒子在下一帧的速度以及在当前帧的三维坐标,获得流体粒子在下一帧的三维坐标;
[0170]
展示模块107,用于根据所有流体粒子在下一帧的三维坐标,在三维虚拟环境中展示下一帧的三维流体。
[0171]
本公开实施例提供的三维流体的展示装置,具体执行上述方法实施例流程,具体请详见上述三维流体的展示方法实施例的内容,在此不再赘述。本公开实施例提供的三维流体的展示装置,使用网格来辅助粒子的运动模拟计算,能够较好地处理外力作用和流体压强对流体运动的影响,且额外开销较小。另外,使用网格的速度变化量来更新粒子速度,而不是把网格速度直接换算为粒子速度,能够减少粒子速度转换成网格速度再转换成粒子速度带来的数值耗散。
[0172]
在上述各实施例的基础上,作为一种可选实施例,基础数据获取模块包括:
[0173]
纹理图像获取单元,用于获取当前帧的第一二维纹理图像和第二二维纹理图像,第一二维纹理图像和第二二维纹理图像中的像素点为三维流体的流体粒子在第一二维纹理图像和第二二维纹理图像的映射,第一二维纹理图像和第二二维纹理图像中的像素点的rgb值分别用于表征对应的流体粒子在当前帧的三维坐标和速度;
[0174]
坐标获取单元,用于对于第一二维纹理图像中的每个像素点,根据像素点中的rgb值,确定与像素点对应的流体粒子在当前帧的三维坐标;
[0175]
速度获取单元,用于对于第二二维纹理图像中的每个像素点,根据像素点中的rgb值,确定与像素点对应的流体粒子在当前帧的速度。
[0176]
在上述各实施例的基础上,作为一种可选实施例,展示装置还包括:
[0177]
映射模块,用于根据流体粒子在下一帧的三维坐标,将流体粒子映射至下一帧的第一二维纹理图像和第二二维纹理图像,获得流体粒子在下一帧的第一二维纹理图像和第二二维纹理图像中对应的像素点;
[0178]
坐标标记模块,用于将流体粒子在下一帧的三维坐标转换成流体粒子在下一帧的第一二维纹理图像中对应的像素点的rgb值;
[0179]
速度标记模块,用于将流体粒子在下一帧的速度转换成流体粒子在下一帧的第二二维纹理图像中对应的像素点的rgb值。
[0180]
在上述各实施例的基础上,作为一种可选实施例,网格速度获取模块包括:
[0181]
参考信息确定子模块,用于将每个网格作为基础网格,并且,针对每个基础网格,将基础网格内部以及预设范围内的周边网格内的流体粒子作为参考流体粒子,确定参考流体粒子与对应的目标网格的相对位置;
[0182]
权重获取子模块,用于根据相对位置获得参考流体粒子相对于对应的目标网格的权重;
[0183]
速度加权获取子模块,用于根据参考流体粒子在当前帧的速度以及参考流体粒子相对于对应的目标网格的权重,获得参考流体粒子相对于对应的目标网格的速度加权值;
[0184]
网格速度获取子模块,用于根据所有参考流体粒子相对于对应的目标网格的速度
加权值之和以及所有参考流体粒子相对于对应的目标网格的权重之和,获得基础网格在当前帧的速度。
[0185]
当基础网格对应的参考流体粒子位于基础网格或者所在的网格与基础网格处于同一水平面时,则参考流体粒子对应的目标网格为参考流体粒子所在的网格,当参流体粒子所在的网格与基础网格处于不同水平面,则参考流体粒子对应的目标网格为基础网格。
[0186]
在上述各实施例的基础上,作为一种可选实施例,权重获取子模块包括:
[0187]
投影单元,用于将三维虚拟环境所在坐标系的每一轴作为目标轴,将对应的目标网格中垂直于目标轴方向的一个面作为目标面,获取参考流体粒子与目标面的中间点之间的距离分别在三轴方向上的投影长度;
[0188]
参数计算单元,用于分别比较三个投影长度与单位长度的差值,获得第一差值、第二差值和第三差值,将第一差值与预设值之间较大的数作为第一参数,将第二差值与预设值之间较大的数作为第二参数,将第三差值与预设值之间较大的数作为第三参数;
[0189]
权重计算单元,用于根据第一参数、第二参数以及第三参数的乘积获得参考流体粒子对于目标网格的权重在目标轴的分量,根据分量获得参考流体粒子对于对应的目标网格的权重。
[0190]
在上述各实施例的基础上,作为一种可选实施例,网格速度更新模块,包括:
[0191]
初始速度计算单元,用于对每个网格在当前帧的速度增加预设方向的加速度,获得每个网格在下一帧的初始速度;
[0192]
散度计算单元,用于根据每个网格在下一帧的初始速度获得网格的散度;
[0193]
压强场计算单元,用于根据网格的散度进行雅各比迭代,获得网格的压强场梯度;
[0194]
网格速度更新单元,用于根据网格在下一帧的初始速度和压强场梯度,获得网格在下一帧的速度。
[0195]
在上述各实施例的基础上,作为一种可选实施例,每个网格包括六面体网格;
[0196]
散度计算单元包括:
[0197]
顶点初始速度计算子单元,用于对于每个网格顶点,根据网格顶点接触的所有网格在下一帧的初始速度,获得网格顶点在下一帧的初始速度;
[0198]
面速度计算子单元,用于对于网格的每一面,根据每一面的所有网格顶点在下一帧的初始速度的平均值,作为每一面的速度;
[0199]
散度确定子单元,用于对于网格中任意的两个相对面,根据两个相对面的速度,获得两个相对面的速度差,根据网格所有相对面的速度差之和,获得网格的散度。
[0200]
在上述各实施例的基础上,作为一种可选实施例,流体位置更新模块包括:
[0201]
过渡位置子模块,用于根据流体粒子在下一帧的速度、当前帧与下一帧的时差以及流体粒子在当前帧的三维坐标,获得流体粒子的过渡位置;
[0202]
过渡网格子模块,用于确定流体粒子的过渡位置所在的网格,作为过渡网格;
[0203]
过渡速度子模块,用于根据过渡网格以及过渡网格在三个坐标轴的延长线上相邻的邻接网格的坐标和速度,获得流体粒子在过渡位置的过渡速度;
[0204]
坐标确定子模块,用于根据流体粒子的过渡速度、时间步长以及流体在当前帧的三维坐标,获得流体粒子在下一帧的三维坐标。
[0205]
在上述各实施例的基础上,作为一种可选实施例,过渡速度子模块包括:
[0206]
邻接网格确定单元,用于将三维虚拟环境所在坐标系的每一轴作为目标轴,确定过渡网格在目标轴的延长线上相邻的邻接网格,确定过渡网格以及邻接网格垂直于目标轴的目标面;
[0207]
面中心点速度确定单元,用于根据过渡网格的目标面的网格顶点接触的所有网格在下一帧的速度,获得过渡网格的目标面的第一中心点的速度;根据邻接网格的目标面的网格顶点接触的所有网格在下一帧的速度,获得邻接网格的目标面的第二中心点的速度;
[0208]
过渡速度确定单元,用于根据邻接网格的坐标、过渡位置以及过渡网格的坐标在目标轴的分量和第一中心点和第二中心点的速度在目标轴的分量,获得过渡速度在目标轴的分量,根据过渡速度在所有坐标轴的分量,获得过渡速度。
[0209]
本公开实施例中提供了一种电子设备,该电子设备包括:存储器和处理器;至少一个程序,存储于存储器中,用于被处理器执行时,对展示三维流体的三维虚拟环境进行网格化处理,获得网格集合;获得三维流体中各流体粒子在当前帧的三维坐标和速度,并确定各流体粒子所在的网格;对于每个网格,根据每个网格内部以及预设范围内的周边网格内的流体粒子在当前帧的速度,获得每个网格在当前帧的速度;对每个网格在当前帧的速度增加预设方向的加速度,获得每个网格在下一帧的速度;根据每个网格从当前帧至下一帧的速度变化量,对每个网格内的流体粒子的速度进行更新,获得流体粒子在下一帧的速度;根据流体粒子在下一帧的速度以及在当前帧的三维坐标,获得流体粒子在下一帧的三维坐标;根据所有流体粒子在下一帧的三维坐标,在三维虚拟环境中展示下一帧的三维流体。与现有技术相比可实现:使用网格来辅助粒子的运动模拟计算,能够较好地处理外力作用和流体压强对流体运动的影响,且额外开销较小。另外,使用网格的速度变化量来更新粒子速度,而不是把网格速度直接换算为粒子速度,能够减少粒子速度转换成网格速度再转换成粒子速度带来的数值耗散。
[0210]
在一个可选实施例中提供了一种电子设备,如图7所示,图7所示的电子设备600包括:处理装置(例如中央处理器、图形处理器等)601,其可以根据存储在只读存储器(rom)602中的程序或者从存储装置606存储装置608加载到随机访问存储器(ram)603中的程序而执行各种适当的动作和处理。在ram 603中,还存储有电子设备600操作所需的各种程序和数据。处理装置601、rom 602以及ram 603通过总线604彼此相连。输入/输出(i/o)接口605也连接至总线604。
[0211]
通常,以下装置可以连接至i/o接口605:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置606;包括例如液晶显示器(lcd)、扬声器、振动器等的输出装置607;包括例如磁带、硬盘等的存储装置606存储装置608;以及通信装置609。通信装置609可以允许电子设备600与其他设备进行无线或有线通信以交换数据。虽然图7示出了具有各种装置的电子设备600,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
[0212]
本公开实施例提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,当其在计算机上运行时,使得计算机可以执行前述方法实施例中相应内容。与现有技术相比,使用网格来辅助粒子的运动模拟计算,能够较好地处理外力作用和流体压强对流体运动的影响,且额外开销较小。另外,使用网格的速度变化量来更新粒子速度,而不是把网格速度直接换算为粒子速度,能够减少粒子速度转换成网格速度再转换成粒子速
度带来的数值耗散。
[0213]
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机程序产品。例如,本公开的实施例包括一种计算机程序产品,其包括承载在非暂态计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序产品可以通过通信装置609从网络上被下载和安装,或者从存储装置606被安装,或者从rom 602被安装。在该计算机程序产品被处理装置601执行时,执行本公开实施例的三维流体的展示方法中限定的上述功能。
[0214]
应该理解的是,虽然附图的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,其可以以其他的顺序执行。而且,附图的流程图中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,其执行顺序也不必然是依次进行,而是可以与其他步骤或者其他步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
[0215]
以上仅是本公开的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本公开原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本公开的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

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

相关文献