虚拟场景中的物体移动控制方法、装置、终端及存储介质与流程

文档序号:18412572发布日期:2019-08-13 18:48阅读:267来源:国知局
虚拟场景中的物体移动控制方法、装置、终端及存储介质与流程

本申请实施例涉及计算机技术领域,特别涉及一种虚拟场景中的物体移动控制方法、装置、终端及存储介质。



背景技术:

目前,一些游戏提供的虚拟场景中,玩家控制的虚拟角色可以驾驶船舶在湖泊、河流等水域中行驶。

为了尽可能逼真地模拟传播在水中的移动,需要计算船舶在水中受到的作用力(如浮力),然后结合船舶的动力引擎给船舶施加的驱动力,控制船舶在水中移动。在相关技术中,提供了一种基于入水面片的积分方法,利用流体力学推导出船舶在水中受到的作用力。其中,入水面片是指船舶浸入在水中的面片。

上述相关技术提供的基于入水面片的积分方法,需要计算每个入水面片的相对速度、角速度等信息,计算过于复杂。



技术实现要素:

本申请实施例提供了一种虚拟场景中的物体移动控制方法、装置、终端及存储介质,可用于解决相关技术在对船舶进行水中运动模拟时,计算过于复杂的技术问题。所述技术方案如下:

一方面,本申请实施例提供一种虚拟场景中的物体移动控制方法,所述虚拟场景中包括目标物体和液体对象,所述目标物体在所述液体对象中移动;

所述方法包括:

计算所述目标物体在所述液体对象中的浸入体积;

获取所述浸入体积对应的几何中心;

根据所述浸入体积和所述浸入体积对应的几何中心,计算所述液体对象对所述目标物体产生的作用力信息;

根据所述作用力信息和所述目标物体的动力引擎提供的驱动力信息,控制所述目标物体在所述液体对象中移动。

另一方面,本申请实施例提供一种画面显示方法,所述方法包括:

显示包含有虚拟场景的第一画面帧,所述虚拟场景中包括目标物体和液体对象,所述目标物体在所述液体对象中移动;

根据所述目标物体在所述第一画面帧中的位置信息、所述目标物体的动力引擎提供的驱动力信息,以及所述液体对象对所述目标物体产生的作用力信息,计算所述目标物体在第二画面帧中的位置信息;

根据所述目标物体在所述第二画面帧中的位置信息,显示所述第二画面帧。

另一方面,本申请实施例提供一种虚拟场景中的物体移动控制装置,所述虚拟场景中包括目标物体和液体对象,所述目标物体在所述液体对象中移动;

所述装置包括:

体积计算模块,用于计算所述目标物体在所述液体对象中的浸入体积;

中心获取模块,用于获取所述浸入体积对应的几何中心;

作用力计算模块,用于根据所述浸入体积和所述浸入体积对应的几何中心,计算所述液体对象对所述目标物体产生的作用力信息;

移动控制模块,用于根据所述作用力信息和所述目标物体的动力引擎提供的驱动力信息,控制所述目标物体在所述液体对象中移动。

另一方面,本申请实施例提供一种画面显示装置,所述装置包括:

第一显示模块,用于显示包含有虚拟场景的第一画面帧,所述虚拟场景中包括目标物体和液体对象,所述目标物体在所述液体对象中移动;

位置计算模块,用于根据所述目标物体在所述第一画面帧中的位置信息、所述目标物体的动力引擎提供的驱动力信息,以及所述液体对象对所述目标物体产生的作用力信息,计算所述目标物体在第二画面帧中的位置信息;

第二显示模块,用于根据所述目标物体在所述第二画面帧中的位置信息,显示所述第二画面帧。

再一方面,本申请实施例提供一种终端,所述终端包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现上述虚拟场景中的物体移动控制方法,或者实现上述画面显示方法。

又一方面,本申请实施例提供一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现上述虚拟场景中的物体移动控制方法,或者实现上述画面显示方法。

又一方面,本申请实施例提供一种计算机程序产品,当该计算机程序产品被执行时,其用于执行上述虚拟场景中的物体移动控制方法,或者执行上述画面显示方法。

本申请实施例提供的技术方案至少包括如下有益效果:

本申请实施例提供的技术方案中,由于目标物体在液体对象中受到的作用力是根据浸入体积计算得到的,相对于相关技术提供的基于入水面片的积分方法,浸入体积的计算相对更为简单,因此能够简化物体在液体中物理运动模拟的计算复杂度,减少计算量。

附图说明

为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本申请一个实施例提供的实施环境的示意图;

图2示例性示出了本申请技术方案的整体流程的示意图;

图3是本申请一个实施例提供的虚拟场景中的物体移动控制方法的流程图;

图4和图5示例性示出了三角面与水面之间的位置关系的示意图;

图6示例性示出了参考点与三角面形成的四面体的示意图;

图7示例性示出了三角面与水面形成的棱柱的示意图;

图8示例性示出了对目标物体进行移动控制的原理示意图;

图9是本申请一个实施例提供的画面显示方法的流程图;

图10示例性示出了一个游戏画面的示意图;

图11是本申请一个实施例提供的虚拟场景中的物体移动控制装置的框图;

图12是本申请另一个实施例提供的虚拟场景中的物体移动控制装置的框图;

图13是本申请一个实施例提供的画面显示装置的框图;

图14是本申请一个实施例提供的终端的结构框图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。

在对本申请实施例进行介绍说明之前,首先对本申请中涉及的一些名词进行解释说明。

1、虚拟场景,是指应用程序构建的非真实场景,其可以是对真实场景的模拟。以游戏应用程序为例,游戏应用程序提供的游戏场景可以是一个虚拟场景,该虚拟场景用于供玩家控制的游戏角色进行游戏竞技。在该虚拟场景中,玩家控制的游戏角色可以进行移动和执行各种动作,如跳跃、释放技能、开枪射击等动作。虚拟场景可以是3d场景,如虚拟房屋、虚拟岛屿、虚拟地图等。在虚拟场景中,除了包含用户控制的虚拟角色之外,还可以包含一些其它的虚拟对象,如地面、房屋、树木、山川、河流等虚拟对象。

2、液体对象,是指虚拟场景中属性为液体的虚拟对象,如河流、湖泊、大海等。

3、目标物体,是指能够在虚拟场景的液体对象中移动的物体,如舰、船、快艇、汽艇、帆船等。

4、浮力,是指物体在流体(包括液体和气体)中,各表面受流体压力的差(合力)。当目标物体在液体对象中移动时,由于目标物体的一部分体积浸入到液体对象中,因此液体对象会给目标物体产生浮力。

5、升力,是指使物体向上的作用力。当目标物体在液体对象中移动时,由于目标物体各个部位受到的水压大小不同,因此会产生一种将目标物体往上托的力。以目标物体为船舶为例,由于船底的设计,在船头部分水压会比较大,船尾部分水压较小,从而变相地把船头往上托的力。

6、阻力,是指妨碍物体运动的作用力。在本申请实施例中,阻力包括移动阻力和拍击力。

7、移动阻力,是指拖拽物体的作用力。当目标物体在液体对象中移动时,一方面液体对象会阻碍目标物体移动,产生移动阻力,另一方面目标物体在液体对象中的浸入体积的改变,也会产生移动阻力。

8、拍击力,是指物体从刚接触液体对象表面,到浸入到液体对象中,要排出液体,受到一定的入水阻力。

请参考图1,其示出了本申请一个实施例提供的实施环境的示意图。该实施环境可以包括:服务器10和至少一个终端20。

终端20可以是诸如手机、平板电脑、pc(personalcomputer,个人计算机)等电子设备。可选地,终端20中安装有目标应用程序的客户端,该目标应用程序的客户端能够提供上述包含液体对象和目标物体的虚拟场景,且目标物体能够在液体对象中移动。可选地,上述目标应用程序为游戏应用程序,例如该游戏应用程序提供的游戏场景中包含河流、湖泊等水域,玩家能够控制游戏角色驾驶船舶在上述水域中移动。在本申请实施例中,对游戏应用程序的类型不作限定,其可以是多人在线游戏,如mmorpg(massivemultiplayeronlinerole-playinggame,大型多人在线角色扮演游戏),如多人在线枪击类游戏。

服务器10用于为终端20提供后台服务,其可以是目标应用程序的后台服务器。服务器10可以是一台服务器,也可以是由多台服务器组成的服务器集群,或者是一个云计算服务中心。

终端20和服务器10之间可以通过网络进行通信,如有线网络或无线网络。

下面,结合图2,对本申请技术方案的整体流程进行介绍说明。如图2所示,本申请技术方案的整体流程包括如下几个阶段:(1)数据准备阶段、(2)作用力计算阶段、(3)力矩计算阶段和(4)物理模拟阶段。

在(1)数据准备阶段,确定目标物体的各个浸入三角面,浸入三角面是指目标物体的表面上浸入在液体对象中的三角面,然后根据目标物体的各个浸入三角面,计算目标物体在液体对象中的浸入体积,以及该浸入体积对应的几何中心。

在(2)作用力计算阶段,结合(1)数据准备阶段得到的数据,计算液体对象对目标物体产生的作用力,包括浮力、升力和阻力。其中,阻力可以包括移动阻力和拍击力。

在(3)力矩计算阶段,结合(2)作用力计算阶段得到的作用力,计算相应的力矩。

在(4)物理模拟阶段,将(2)作用力计算阶段得到的作用力以及(3)力矩计算阶段得到的力矩,施加在目标物体上,进行物理运动的模拟。

在本申请技术方案中,由于目标物体在液体对象中受到的作用力是根据浸入体积计算得到的,相对于相关技术提供的基于入水面片的积分方法,浸入体积的计算相对更为简单,因此能够简化物体在液体中物理运动模拟的计算复杂度,减少计算量。

请参考图3,其示出了本申请一个实施例提供的虚拟场景中的物体移动控制方法的流程图。该方法可以应用于图1所示实施环境中的终端20中,如该方法可以由终端20中安装的目标应用程序的客户端执行。为了便于说明,在下述方法实施例中,仅以各步骤的执行主体为终端进行介绍说明。该方法可以包括如下几个步骤(301~304):

步骤301,计算目标物体在液体对象中的浸入体积。

浸入体积是指目标物体在液体对象的表面以下部分的体积。以船舶在水域中行驶为例,船舶的一部分在水面以上,另一部分在水面以下,浸入体积即为在水面以下那一部分的体积。

在计算浸入体积时,可以将目标物体浸入在液体对象以下的表面分割成若干个三角面(可称为“浸入三角面”),然后在液体对象的表面选择一个参考点,将该参考点分别与各个浸入三角面的顶点相连,得到若干个四面体(也即以参考点为顶点的三棱锥),根据各个四面体的体积即可计算出浸入体积。

步骤302,获取浸入体积对应的几何中心。

目标物体浸入在液体对象中的那一部分是一个多面体,浸入体积对应的几何中心即为该多面体的几何中心。由于该多面体的不同位置的质量不同,因此该多面体的几何中心与该多面体的质心可能并不重合。

步骤303,根据浸入体积和浸入体积对应的几何中心,计算液体对象对目标物体产生的作用力信息。

在本申请实施例中,作用力信息包括作用力及相应的力矩。有的作用力存在力矩,有的作用力也可能不存在力矩。可选地,液体对象对目标物体产生的作用力包括浮力、升力和阻力。

步骤304,根据作用力信息和目标物体的动力引擎提供的驱动力信息,控制目标物体在液体对象中移动。

目标物体的动力引擎是指应用程序模拟给该目标物体提供驱动力的模拟引擎。以船舶为例,真实场景中的船舶具有发动机,该发动机即为船舶的动力引擎,能够给船舶提供驱动力,使得船舶克服阻力在水域中行驶。在虚拟场景中,为了对真实场景进行模拟,目标物体同样存在驱动引擎,用于给该目标物体提供驱动力和转向力矩。

在本申请实施例中,驱动力信息可以包括驱动力及相应的力矩。其中,驱动力信息可以包括驱动目标物体前进的力,还可以包括驱动目标物体转向的力矩。

可选地,终端根据作用力信息和驱动力信息,计算给目标物体施加的力和力矩,然后将该力和力矩施加在目标物体上,控制目标物体在液体对象中移动。

综上所述,本申请实施例提供的技术方案中,由于目标物体在液体对象中受到的作用力是根据浸入体积计算得到的,相对于相关技术提供的基于入水面片的积分方法,浸入体积的计算相对更为简单,因此能够简化物体在液体中物理运动模拟的计算复杂度,减少计算量。

另外,在模拟目标物体在液体对象中受到的作用力时,除了考虑浮力之外,还考虑了升力和阻力,使得对作用力的模拟更加全面逼真。

下面,对浸入体积及其几何中心的计算过程进行介绍说明。

在示例性实施例中,浸入体积的计算过程可以包括如下几个步骤:

1、根据液体对象的表面高度,获取目标物体的各个浸入三角面;

浸入三角面是指目标物体的表面上浸入在液体对象中的三角面。将目标物体的表面划分成多个三角面,是为了便于体积的计算。

目标物体的表面的任意一个三角面,只可能处于以下三种状态中的一种:完全浸入到液体对象中(即完全入水)、完全没有浸入到液体对象中(即完全出水)、部分浸入到液体对象中(即一部分入水)。以a、b、c三个顶点构成的三角面为例,对上述三种状态进行分析:

(1)三角面完全浸入到液体对象中,其特点是a、b、c三个点均低于液体对象的表面高度。如果在液体对象的表面选择一个参考点p,该参考点p与a、b、c三个点连接形成四面体,该四面体完全浸入到液体对象中。此时,该a、b、c三个点构成的三角面属于浸入三角面。

(2)三角面完全没有浸入到液体对象中,其特点是a、b、c三个点均高于液体对象的表面高度。此时,该a、b、c三个点构成的三角面不属于浸入三角面。

(3)三角面部分浸入到液体对象中,其特点是a、b、c三个点中,有的低于液体对象的表面高度,有的高于液体对象的表面高度。这又分为两种情况:两个点低于液体对象的表面高度(即两个点入水),一个点低于液体对象的表面高度(即一个点入水)。

对于第一种情况,两个点入水时,如图4所示,直线l代表水面,假设a位于水面以上,b和c位于水面以下,三角面abc被分割成3个三角形x、y和z,其中三角形x位于水面以上,不属于浸入三角面,三角形y和z位于水面以下,属于浸入三角面。

对于第二种情况,一个点入水时,如图5所示,直线l代表水面,假设a位于水面以下,b和c位于水面以上,三角面abc被分割成3个三角形x、y和z,其中三角形x位于水面以下,属于浸入三角面,三角形y和z位于水面以上,不属于浸入三角面。

因此,根据目标物体的表面的各个三角面与液体对象表面的位置关系,可以得到目标物体的各个浸入三角面。

2、在液体对象的表面选择参考点,分别计算该参考点与各个浸入三角面形成的四面体的体积;

终端可以选择目标物体中任意一个位于液体对象的表面的点作为参考点。可选地,终端选择目标物体的几何中心在液体对象表面的投影点,作为参考点。

如图6所示,参考点p分别与三角面abc的各个顶点相连,形成四面体。该四面体的体积vi可以采用如下公式计算得到:

其中,u、v、w分别表示从参考点p到a、b、c三个点的向量。当u、v、w三个向量逆时针排列时,参考点p在三角面abc的正面,vi是大于0的;反之,当u、v、w三个向量顺时针排列时,参考点p在三角面abc的反面,vi是小于0的。

3、将上述各个四面体的体积相加,得到浸入体积。

也即,浸入体积其中,vi表示参考点与第i个浸入三角面形成的四面体的体积,n表示浸入三角面的数量,n为正整数,i为小于等于n的正整数。

可选地,浸入体积对应的几何中心的计算过程可以包括如下几个步骤:

1、分别获取上述各个四面体的几何中心;

仍然以图6所示的四面体为例,该四面体的几何中心ci可以采用如下公式计算得到:

2、以各个四面体的体积作为权重,根据各个四面体的几何中心,计算浸入体积对应的几何中心。

采用如下公式计算浸入体积对应的几何中心c:

其中,v表示浸入体积,vi表示参考点与第i个浸入三角面形成的四面体的体积,ci表示参考点与第i个浸入三角面形成的四面体的几何中心,n表示浸入三角面的数量,n为正整数,i为小于等于n的正整数。

上述实施例提供的计算浸入体积的方法,我们假设液体对象表面是一个水平面,且目标物体与液体对象表面的各个交点位于同一水平面上,这简化了浸入体积的计算。但这在一定程度上存在精度损失,因为实际情况下液体对象表面可能并非是一个水平面,如存在波浪。如果无法接受这种精度损失,可以考虑从浸入三角面向液体对象表面投影出一个上下面不平行的棱柱,计算体积。如图7所示,折线条l代表水平面,棱柱的上下平面并不平行。

下面,对各个作用力及力矩的计算过程进行介绍说明。

1、浮力和浮力的力矩

在示例性实施例中,根据浸入体积和液体对象的密度,计算浮力。可选地,根据阿基米德原理,按照下述公式计算浮力fb:

fb=ρgv;

其中,ρ表示液体对象的密度,g表示重力加速度,v表示浸入体积。

浮力方向是竖直向上的,作用位置在浸入体积对应的几何中心。当目标物体在液体对象中静止的时候,其受到的重力和浮力大小相同,方向相反。由于浸入体积对应的几何中心并不总是和目标物体的质心位置相同,所以会产生浮力力矩。

可选地,根据浮力、浸入体积对应的几何中心和目标物体的质心,计算浮力的力矩。按照如下公式计算浮力的力矩tb:

tb=fb×r;

其中,fb表示浮力,r是一个向量,表示浸入体积对应的几何中心与目标物体的质心的三维坐标差值。

在实际计算中,发现使用浮力计算力矩会很不稳定,特别是在有大浪的情况下。因此在实际计算时,可以将上述浮力力矩的计算公式,扩展为如下公式:

tb=max(-mg,fb)×r;

其中,m表示目标物体的质量,g表示重力加速度。

同时,为了更自由地调试浮力的手感,我们提供了浮力力矩参数paramtb,最终浮力力矩的计算公式可以如下:

tb=((max(-mg,fb)×r)rt×paramtb)r;

其中,r表示目标物体的旋转矩阵,旋转矩阵是正交的,在计算时,直接使用其转置代替求逆以计算浮力力矩。

2、升力和升力的力矩

以目标物体为船舶为例,船舶在设计的时候,会让水在其周围形成环状流场,这个流场最终会形成升力。在船舶移动的时候,流体会被船身分成两层:一段贴近船身流动,称为上游(upstream);一段在上游的外层,远离船身流动,称为下游(downstream)。由于水面是有粘度的,下游会被更底层的水流牵扯,移动更慢。这样就会在船尾形成一个间隙,上游则会填充这个间隙,从而形成环流。这个环流会在船舶底板上形成升力。

在本申请实施例中,将升力简化为两部分。第一部分根据升力公式计算得到,其中,ρ表示液体对象的密度,c表示升力系数,和目标物体的表面形状及朝向有关,s表示目标物体在液体对象中的浸入面积,v表示离目标物体很远处液体对象的相对速度。在实际应用中,可以假定液体对象是没有流速的,v是目标物体的速度。s正比于目标物体与液体对象表面的接触面积,可以使用目标物体在液体对象中的浸入长度乘以一个定值来表示。目标物体在液体对象中的浸入长度,是指目标物体与液体对象表面的首尾两个接触点之间的距离。第二部分与浸入长度的平方成正比,这么做能让目标物体在液体对象中移动起来后迅速获得足够的升力。

综合上面第一部分和第二部分,根据液体对象的密度、目标物体与液体对象的相对速度,以及目标物体在液体对象中的浸入长度,计算升力。可选地,按照如下公式计算升力fl:

|fl|=paraml1×l|v|2+paraml2×l2

其中,paraml1是根据液体对象的密度和升力系数计算得到的第一常量项,paraml2是第二常量项,v表示相对速度,l表示浸入长度。paraml1和paraml2可以配置。l可以在计算目标物体的浸入体积时,将所有的浸入三角面的坐标转换到目标物体的模型空间内,计算得出。

上述公式定义了升力的大小,升力的朝向是竖直向上的。升力同样有力矩。可选地,根据升力和目标物体的质心,计算升力的力矩。

当目标物体为船舶时,在计算升力力矩的时候,将力臂定义为目标物体的模型空间沿着负的船舷方向的单位向量。假设+z是模型的前方,那么可以得到升力的力矩tl为:

tl=paramtl×(fl×([00-1]r-masscenter));

其中,paramtl表示升力力矩系数,r表示目标物体的旋转矩阵,masscenter表示目标物体的质心。

3、移动阻力和移动阻力的力矩

在水中运行的物体会受到水的移动阻力,根据流体力学中的经典阻力方程:物体在流体中受到的移动阻力为f,ρ是流体的密度,c是移动阻力系数,s是参考面积,一般定义为运动方向上的正交投影面积,v是速度。和计算升力时一样,假定水的流速为0,v等于船舶的速度。s的大小正比于浸入体积的平方根。

另外,水的移动阻力还和浸入体积的变化情况有关,在浸入体积增大的时候,需要排出更多的水;在浸入体积减小的时候,会有水被填入。上述公式是根据目标物体在某个时间点的入水情况算出的移动阻力,还需要根据相邻两个时间点之间浸入体积的变化情况计算出额外的移动阻力,这两个移动阻力之间是互相补充的。可选地,根据浸入体积的变化情况计算出的移动阻力f为:

其中,v表示目标物体与液体对象的相对速度,m表示目标物体的质量,vtotal表示目标物体的总体积,vinc表示浸入体积的增加量,vdec表示浸入体积的减少量,paraminc和paramdec为预设系数。在计算浸入体积的增加量和减少量时,不是按照总的浸入体积计算的,而是根据参考点与每个三角面形成的四面体分别进行计算。也即,vinc表示参考点与各个浸入三角面形成的四面体中,体积增大的各个四面体的增加量的累加值;vdec表示参考点与各个浸入三角面形成的四面体中,体积减小的各个四面体的减少量的累加值。

结合上述两方面,根据液体对象的密度、目标物体在液体对象中沿移动方向的正交投影面积、目标物体与液体对象的相对速度、目标物体的质量,以及浸入体积的变化情况,计算移动阻力。可选地,按照如下公式计算移动阻力fd:

其中,paramd是根据液体对象的密度、正交投影面积和移动阻力系数计算得到的第三常量项,vimmerse表示浸入体积。

移动阻力同样有力矩,移动阻力的力矩是相对于目标物体的角速度的。可选地,根据移动阻力和目标物体的角速度,计算移动阻力的力矩。例如,按照如下公式计算移动阻力的力矩td:

其中,w表示目标物体的角速度,paramtd表示和目标物体有关的常量。

4、拍击力

有了上文介绍的浮力、升力和移动阻力,目标物体在液体对象中的运动已经非常接近真实世界了。但是目标物体从空中落入液体对象中的时候没有明显的减速,因此在示例性实施例中增加拍击力。

可选地,根据目标物体在液体对象中的新增三角面所对应的四面体体积、目标物体与液体对象的相对速度,以及目标物体的质量,计算拍击力。例如,按照如下公式计算拍击力fs:

其中,params是调节拍击力影响的常量项,vnew表示目标物体在液体对象中的各个新增三角面所对应的四面体体积之和,vnew是根据各个新增三角面所对应的四面体分别计算的,只有三角面从完全没有浸入到液体对象中到完全浸入到液体对象中才会算作新增三角面。nnew=normalize(∑(aibi×aici)vinew);其中,i为正整数,ai、bi和ci分别表示第i个新增三角面的三个顶点,vinew表示第i个新增三角面所对应的四面体体积,normalize()表示归一化。

在计算拍击力时,除了需要计算新增三角面所对应的四面体体积,还需要计算新增三角面的朝向。以新增三角面所对应的四面体体积作为权重,求和各个新增三角面的法线,得到新增体积表面的法向量。在计算拍击力时,仅使用投影带法向量的速度分量。因为液体对象的表面是作用在目标物体表面的,每当一个面片从空中落入液体对象中时,受到的阻力一定垂直该面片。

另外,移动阻力和拍击力都属于阻力,它们只能让速度和角速度减小,但不能反向。因此,需要将阻力控制在一定范围内。设定fr=fd+fs,tr=td,需要保证:

1、其中,m表示目标物体的质量,v表示目标物体与液体对象的相对速度,δt表示相邻两次计算的间隔时长。这对于向量的每个分量都满足。之所以要每个分量分别检测,是因为fr的朝向和v的朝向是不同的。

2、其中,w表示目标物体的角速度,r表示目标物体的旋转矩阵,i是惯性张量,其一般为一个三维向量,δt表示相邻两次计算的间隔时长。

在本申请实施例提供的技术方案中,在计算升力、移动阻力等作用力时,利用了泰勒展开的思想,将目标物体受到的作用力,用几个简单的多项式相加进行表征,简化了作用力的计算方式。

终端(如本地客户端)可以每隔预设时间间隔计算一次目标物体在液体对象中的浸入体积,然后根据该浸入体积和浸入体积对应的几何中心,计算液体对象对目标物体产生的作用力信息,然后根据作用力信息和目标物体的动力引擎提供的驱动力信息,控制目标物体在液体对象中移动。上述预设时间间隔可以根据实际需求预先设定,例如每一个画面帧计算一次,则该预设时间间隔(也即上文介绍的δt)即为相邻两个画面帧之间的间隔时长。

另外,终端(如本地客户端)还需要将目标物体的位置信息同步给其它终端(如第三方客户端),以便其它终端也能够显示该目标物体在液体对象中的运动情况。可选地,本地客户端每隔预设时间间隔向其它客户端(也即第三方客户端)发送目标物体的位置信息;其中,其它客户端用于根据目标物体的位置信息,计算目标物体的速度和角速度,根据目标物体的速度和角速度,控制目标物体在液体对象中移动。

上文所述的本地客户端是指控制目标物体在液体对象中移动的客户端,第三方客户端是指与本地客户端位于同一虚拟场景的其它客户端。

以目标物体为船舶,本地客户端每一个画面帧更新一次船舶在水中受到的作用力为例。本地客户端根据当前画面帧中船舶在水中的浸入体积,计算船舶受到的作用力及相应的力矩,然后结合动力引擎提供的驱动力及相应的力矩,计算给船舶施加的力和力矩。之后,本地客户端将该力和力矩施加在船舶上,控制船舶在水中移动。可选地,由底层物理引擎将该力和力矩施加在船舶上,控制船舶在水中移动,例如结合船舶在当前画面帧中的位置信息,以及该力和力矩,计算船舶在下一个画面帧中的位置信息。

另外,本地客户端会通过后台服务器向第三方客户端同步船舶的位置信息。在本申请实施例中,对同步频率不作限定,如每一帧同步一次,也可以每隔多帧同步一次,以节省开销。第三方客户端根据同步过来的位置信息,计算船舶的速度和角速度,然后根据该速度和角速度控制船舶在水中移动。例如,根据该速度和角速度,计算出船舶在第三方客户端显示的各个画面帧中的位置信息。

如图8所示,其示例性示出了对目标物体进行移动控制的原理示意图。终端可以包括如下功能模块:浮力计算模块81、浮力更新模块82、动力引擎模块83和同步模块84。

对目标物体进行移动控制,有如下两种方式:(1)根据力和力矩控制目标物体移动;(2)根据速度和角速度控制目标物体移动。上述两种方式择一使用,如果两者混用,会导致速度和力互相影响,角速度和力矩互相影响,移动控制不准确。如果目标物体是本地客户端所控制的物体,则终端采用上述第(1)种方式,也即根据力和力矩控制目标物体移动;如果目标物体是其它客户端所控制的物体,则终端采用上述第(2)种方式,也即根据速度和角速度控制目标物体移动。

如果采用上述第(1)种方式,也即根据力和力矩控制目标物体移动,则终端通过浮力计算模块81计算目标物体在液体对象中受到的作用力信息,包括上文介绍的浮力、升力、阻力等作用力及相应的力矩,将该作用力信息更新到浮力更新模块82中,动力引擎模块83提供驱动力及相应的力矩,然后终端根据作用力信息和驱动力信息,计算给目标物体施加的力和力矩,然后将该力和力矩施加在目标物体上,控制目标物体在液体对象中移动。

如果采用上述第(2)种方式,也即根据速度和角速度控制目标物体移动,则终端通过浮力计算模块81计算目标物体在液体对象中受到的作用力信息,包括上文介绍的浮力、升力、阻力等作用力及相应的力矩,将该作用力信息更新到浮力更新模块82中,终端根据浮力更新模块82中的作用力信息,计算目标物体的速度和角速度。同步模块84接收其它客户端同步过来的目标物体的位置信息,终端根据该位置信息计算目标物体的速度和角速度。最后,终端结合根据浮力更新模块82的作用力信息计算出的速度和角速度,以及根据同步模块84的位置信息计算出的速度和角速度,确定出目标物体最终的速度和角速度,然后根据该速度和角速度控制目标物体在液体对象中移动。

在示例性实施例中,浮力更新模块82可以维护两个变量,记为第一变量和第二变量。其中,第一变量用于存储浮力、升力、阻力等作用力,第二变量用于存储作用力的力矩。假设终端每隔一帧计算并更新一次作用力信息,则上述第一变量和第二变量中的数据,也会每隔一帧清空一次。终端根据第一变量中存储的作用力,计算目标物体的速度,另外根据第二变量中存储的力矩,计算目标物体的角速度。

在示例性实施例中,通过如下公式对目标物体的速度和角速度进行更新:

wnew=wold+((t0×rt)×i-1)r;

其中,vold和vnew分别表示更新前和更新后的速度,f0表示目标物体在液体对象中受到的作用力,m表示目标物体的质量,t表示更新的时间间隔;wnew和wold分别表示更新前和更新后的角速度,t0表示目标物体在液体对象中受到的作用力的力矩,r表示目标物体的旋转矩阵,i是惯性张量。

上述速度和角速度均为三维向量,其包含三维直角坐标系中三个不同方向的分量,如上下(以up表示)、前后(以fwd表示)、左右(以right表示)三个不同方向的分量。可选地,为了让第三方客户端对目标物体的运动有更为合理的表现,可以使用根据力和力矩计算出的速度和角速度中的部分分量,覆盖根据同步的位置信息计算出的速度和角速度中的部分分量。例如,为了贴合水面高度,使用根据力和力矩计算出的速度的up分量,覆盖根据同步的位置信息计算出的速度的up分量,并保留根据同步的位置信息计算出的速度的fwd分量和right分量不变。又例如,为了贴合水面上波动的感觉,使用根据力和力矩计算出的角速度的fwd分量和right分量,覆盖根据同步的位置信息计算出的角速度的fwd分量和right分量,并保留根据同步的位置信息计算出的角速度的up分量不变。

另外,终端可以仅在目标物体接近液体对象的表面时计算浮力,从而降低cpu开销。

综上所述,在本申请实施例提供的技术方案中,通过对目标物体在液体对象中受到的各个作用力进行计算,并根据该作用力及相应的力矩,对目标物体在液体对象中的运动进行物理模拟,使其运动表现更加逼真自然。

请参考图9,其示出了本申请一个实施例提供的画面显示方法的流程图。该方法可以应用于图1所示实施环境中的终端20中,如该方法可以由终端20中安装的目标应用程序的客户端执行。为了便于说明,在下述方法实施例中,仅以各步骤的执行主体为终端进行介绍说明。该方法可以包括如下几个步骤(901~903):

步骤901,显示包含有虚拟场景的第一画面帧。

虚拟场景中包括目标物体和液体对象,目标物体在液体对象中移动。

步骤902,根据目标物体在第一画面帧中的位置信息、目标物体的动力引擎提供的驱动力信息,以及液体对象对目标物体产生的作用力信息,计算目标物体在第二画面帧中的位置信息。

例如,终端可以根据上文实施例介绍的方法,计算目标物体在第一画面帧时在液体对象中的浸入体积,然后根据该浸入体积和该浸入体积对应的几何中心,计算液体对象对目标物体产生的作用力信息。之后,终端结合液体对象对目标物体产生的作用力信息和目标物体的动力引擎提供的驱动力信息,计算施加给目标物体的力和力矩。之后,终端根据目标物体在第一画面帧中的位置信息,上述力和力矩,计算出目标物体在第二画面帧中的位置信息。

步骤903,根据目标物体在第二画面帧中的位置信息,显示第二画面帧。

终端计算出目标物体在第二画面帧中的位置信息之后,即可显示第二画面帧,并根据该位置信息在第二画面帧中显示目标物体。

如图10所示,以游戏场景中船舶在水中的运动为例,终端显示的游戏画面帧中包含船舶100,船舶100在水中的物理运动模拟,可以采用上文介绍的方法进行。玩家在操控船舶100在水中行驶的过程中,针对不同的船舶、不同的水面环境,会感受到不同的操控体验。比如在浪大的时候,能乘风破浪;在浪小的时候,驾驶非常平稳。对于快艇、帆船、气艇能做到驾驶手感和水中表现的区别。例如,气艇船底较平,和水面接触面积大,开起来受水波影响更大,入水时受到的阻力更大。又例如,快艇船底是流线型,船头部分更轻,和水面接触面积小,开起来会有明显的被往上托的感觉。

综上所述,本申请实施例提供的技术方案中,通过对目标物体在液体对象中受到的各个作用力进行计算,并根据该作用力及相应的力矩,对目标物体在液体对象中的运动进行物理模拟,使其运动表现更加逼真自然。

下述为本申请装置实施例,可以用于执行本申请方法实施例。对于本申请装置实施例中未披露的细节,请参照本申请方法实施例。

请参考图11,其示出了本申请一个实施例提供的虚拟场景中的物体移动控制装置的框图。该装置具有实现上述虚拟场景中的物体移动控制方法的功能,所述功能可以由硬件实现,也可以由硬件执行相应的软件实现。该装置可以是终端,也可以设置在终端中。该装置1100可以包括:体积计算模块1110、中心获取模块1120、作用力计算模块1130和移动控制模块1140。

体积计算模块1110,用于计算所述目标物体在所述液体对象中的浸入体积。

中心获取模块1120,用于获取所述浸入体积对应的几何中心。

作用力计算模块1130,用于根据所述浸入体积和所述浸入体积对应的几何中心,计算所述液体对象对所述目标物体产生的作用力信息。

移动控制模块1140,用于根据所述作用力信息和所述目标物体的动力引擎提供的驱动力信息,控制所述目标物体在所述液体对象中移动。

综上所述,本申请实施例提供的技术方案中,由于目标物体在液体对象中受到的作用力是根据浸入体积计算得到的,相对于相关技术提供的基于入水面片的积分方法,浸入体积的计算相对更为简单,因此能够简化物体在液体中物理运动模拟的计算复杂度,减少计算量。

在一些可能的设计中,所述体积计算模块1110,用于:

根据所述液体对象的表面高度,获取所述目标物体的各个浸入三角面,所述浸入三角面是指所述目标物体的表面上浸入在所述液体对象中的三角面;

在所述液体对象的表面选择参考点,分别计算所述参考点与各个所述浸入三角面形成的四面体的体积;

将各个所述四面体的体积相加,得到所述浸入体积。

在一些可能的设计中,所述中心获取模块1120,用于:

分别获取各个所述四面体的几何中心;

以各个所述四面体的体积作为权重,根据各个所述四面体的几何中心,计算所述浸入体积对应的几何中心。

在一些可能的设计中,所述作用力信息包括浮力和所述浮力的力矩。相应地,如图12所示,所述作用力计算模块1130,包括:浮力计算子模块1131,用于:

根据所述浸入体积和所述液体对象的密度,计算所述浮力;

根据所述浮力、所述浸入体积对应的几何中心和所述目标物体的质心,计算所述浮力的力矩。

在一些可能的设计中,所述作用力信息包括升力和所述升力的力矩;相应地,如图12所示,所述作用力计算模块1130,包括:升力计算子模块1132,用于:

根据所述液体对象的密度、所述目标物体与所述液体对象的相对速度,以及所述目标物体在所述液体对象中的浸入长度,计算所述升力;

根据所述升力和所述目标物体的质心,计算所述升力的力矩。

在一些可能的设计中,所述作用力信息包括移动阻力和所述移动阻力的力矩;相应地,如图12所示,所述作用力计算模块1130,包括:移动阻力计算子模块1133,用于:

根据所述液体对象的密度、所述目标物体在所述液体对象中沿移动方向的正交投影面积、所述目标物体与所述液体对象的相对速度、所述目标物体的质量,以及所述浸入体积的变化情况,计算所述移动阻力;

根据所述移动阻力和所述目标物体的角速度,计算所述移动阻力的力矩。

在一些可能的设计中,所述作用力信息还包括拍击力;相应地,如图12所示,所述作用力计算模块1130,包括:拍击力计算子模块1134,用于:

所述根据所述浸入体积和所述浸入体积对应的几何中心,计算所述液体对象对所述目标物体产生的作用力信息,包括:

根据所述目标物体在所述液体对象中的新增三角面所对应的四面体体积、所述目标物体与所述液体对象的相对速度,以及所述目标物体的质量,计算所述拍击力。

在一些可能的设计中,所述移动控制模块1140,用于:

根据所述作用力信息和所述驱动力信息,计算给所述目标物体施加的力和力矩;

将所述力和力矩施加在所述目标物体上,控制所述目标物体在所述液体对象中移动。

在一些可能的设计中,如图12所示,所述装置1100还包括:

位置同步模块1150,用于每隔预设时间间隔向其它客户端发送所述目标物体的位置信息;

其中,所述其它客户端用于根据所述目标物体的位置信息,计算所述目标物体的速度和角速度,根据所述目标物体的速度和角速度,控制所述目标物体在所述液体对象中移动。

请参考图13,其示出了本申请一个实施例提供的画面显示装置的框图。该装置具有实现上述画面显示方法的功能,所述功能可以由硬件实现,也可以由硬件执行相应的软件实现。该装置可以是终端,也可以设置在终端中。该装置1300可以包括:第一显示模块1310、位置计算模块1320和第二显示模块1330。

第一显示模块1310,用于显示包含有虚拟场景的第一画面帧,所述虚拟场景中包括目标物体和液体对象,所述目标物体在所述液体对象中移动。

位置计算模块1320,用于根据所述目标物体在所述第一画面帧中的位置信息、所述目标物体的动力引擎提供的驱动力信息,以及所述液体对象对所述目标物体产生的作用力信息,计算所述目标物体在第二画面帧中的位置信息。

第二显示模块1330,用于根据所述目标物体在所述第二画面帧中的位置信息,显示所述第二画面帧。

综上所述,本申请实施例提供的技术方案中,通过对目标物体在液体对象中受到的各个作用力进行计算,并根据该作用力及相应的力矩,对目标物体在液体对象中的运动进行物理模拟,使其运动表现更加逼真自然。

需要说明的是,上述实施例提供的装置,在实现其功能时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的装置与方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。

请参考图14,其示出了本申请一个实施例提供的终端1400的结构框图。该终端1400可以是手机、平板电脑、游戏设备、pc等电子设备。

通常,终端1400包括有:处理器1401和存储器1402。

处理器1401可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器1401可以采用dsp(digitalsignalprocessing,数字信号处理)、fpga(fieldprogrammablegatearray,现场可编程门阵列)、pla(programmablelogicarray,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器1401也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称cpu(centralprocessingunit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器1401可以在集成有gpu(graphicsprocessingunit,图像处理器),gpu用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器1401还可以包括ai(artificialintelligence,人工智能)处理器,该ai处理器用于处理有关机器学习的计算操作。

存储器1402可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器1402还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器1402中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器1401所执行以实现本申请中方法实施例提供的方法。

在一些实施例中,终端1400还可选包括有:外围设备接口1403和至少一个外围设备。处理器1401、存储器1402和外围设备接口1403之间可以通过总线或信号线相连。各个外围设备可以通过总线、信号线或电路板与外围设备接口1403相连。具体地,外围设备包括:射频电路1404、触摸显示屏1405、摄像头1406、音频电路1407、定位组件1408和电源1409中的至少一种。

本领域技术人员可以理解,图14中示出的结构并不构成对终端1400的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。

在示例中实施例中,还提供了一种终端,所述终端包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集。所述至少一条指令、至少一段程序、代码集或指令集经配置以由一个或者一个以上处理器执行,以实现上述实施例提供的方法。

在示例性实施例中,还提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或所述指令集在被计算机设备的处理器执行时实现上述实施例提供的方法。可选地,上述计算机可读存储介质可以是rom、ram、cd-rom、磁带、软盘和光数据存储设备等。

在示例性实施例中,还提供了一种计算机程序产品,当该计算机程序产品被执行时,其用于实现上述实施例提供的方法。

应当理解的是,在本文中提及的“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。另外,本文中描述的步骤编号,仅示例性示出了步骤间的一种可能的执行先后顺序,在一些其它实施例中,上述步骤也可以不按照编号顺序来执行,如两个不同编号的步骤同时执行,或者两个不同编号的步骤按照与图示相反的顺序执行,本申请实施例对此不作限定。

以上所述仅为本申请的示例性实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。

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