CN103745500B - 基于应用的柔体模拟方法和装置 - Google Patents
基于应用的柔体模拟方法和装置 Download PDFInfo
- Publication number
- CN103745500B CN103745500B CN201310741531.1A CN201310741531A CN103745500B CN 103745500 B CN103745500 B CN 103745500B CN 201310741531 A CN201310741531 A CN 201310741531A CN 103745500 B CN103745500 B CN 103745500B
- Authority
- CN
- China
- Prior art keywords
- pos
- beformable body
- positional information
- body model
- point
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Abstract
本申请提供种基于应用的柔体模拟方法和装置。该方法包括:CPU选择场景中需要使用的且满足设定条件的柔体对应的柔体模型,所述满足设定条件的柔体为与场景中人物模型交互次数小于设定值的柔体;CPU针对选择的每一柔体模型执行以下步骤1和步骤2:步骤1,识别该柔体模型在被细分之后得到的多个三角形方格,将所述柔体模型中组成三角形方格的不同点的位置信息传送给图形处理器GPU;步骤2,将根据需求确定的模拟该柔体模型对应的柔体所需要的调节参数传送给GPU;GPU利用CPU传送的点的位置信息和调节参数模拟所述柔体模型对应的柔体。采用本发明,既能实现模拟真实世界中的柔体,又能不使柔体解算过程为客户端计算带来巨大压力。
Description
技术领域
本申请涉及计算机技术,特别涉及基于应用的柔体模拟方法和装置。
背景技术
目前,在一些应用比如大型多人在线角色扮演(MMORPG)游戏中,为了增强游戏的表现感,引入了真实物理世界中的特性,比如刚体、柔体等。本申请主要涉及柔体,因此,重点描述柔体,其他特性不重点描述。
所谓柔体,简单地说就是柔软的物体,例如:衣服、国旗、有弹性的皮肤,或者是会随风飘动的毛发等等。通常,柔体都具有拉伸、变形等特征。
在应用比如MMORPG游戏中,模拟柔体是需要大量的解算过程,而通常效果很好的解算都是非实时算法,但是,对于一些应用比如MMORPG游戏来说都是实时进行的,模拟柔体的非实时算法是无法满足的。并且,在应用比如MMORPG游戏实时进行的情况下,客户端对运算量有很大的限制,即使一些模拟柔体的非实时算法能够使用,大量的柔体解算也会带来很大的开销,使得游戏客户端变得很卡,游戏不流畅。
因此,一种既能模拟真实世界中的柔体,又能不使柔体解算过程为客户端计算带来巨大压力是当前亟待解决的技术问题。
发明内容
本申请提供了基于应用的柔体模拟方法和装置,以实现既能模拟真实世界中的柔体,又能不使柔体解算过程为客户端计算带来巨大压力。
本申请提供的技术方案包括:
一种基于应用的柔体模拟方法,该方法包括:
CPU选择场景中需要使用的且满足设定条件的柔体对应的柔体模型,所述满足设定条件的柔体为与场景中人物模型交互次数小于设定值的柔体;
CPU针对选择的每一柔体模型执行以下步骤1和步骤2:步骤1,识别该柔体模型在被细分之后得到的多个三角形方格,将所述柔体模型中组成三角形方格的不同点的位置信息传送给图形处理器GPU;步骤2,将根据需求确定的模拟该柔体模型对应的柔体所需要的调节参数传送给GPU;
GPU利用CPU传送的点的位置信息和调节参数模拟所述柔体模型对应的柔体。
一种基于应用的柔体模拟装置,该装置包括:CPU和GPU;
其中,CPU包括:
选择单元,用于选择场景中需要使用的且满足设定条件的柔体对应的柔体模型,所述满足设定条件的柔体为与场景中人物模型交互次数小于设定值的柔体;
处理单元,用于针对选择的每一柔体模型执行以下步骤1和步骤2:步骤1,识别该柔体模型在被细分之后得到的多个三角形方格,将所述柔体模型中组成三角形方格的不同点的位置信息传送给图形处理器GPU;步骤2,将根据需求确定的模拟该柔体模型对应的柔体所需要的调节参数传送给GPU;
GPU包括:
接收单元,用于接收CPU传送的点的位置信息和调节参数;
模拟单元,用于利用CPU传送的点的位置信息和调节参数模拟所述柔体模型对应的柔体。
由以上技术方案可以看出,本发明中,通过CPU选择场景中需要使用的且满足设定条件的柔体对应的柔体模型,CPU针对选择的每一柔体模型执行以下步骤1和步骤2:步骤1,识别该柔体模型在被细分之后得到的多个三角形方格,将所述柔体模型中组成三角形方格的不同点的位置信息传送给图形处理器GPU;步骤2,将根据需求确定的模拟该柔体模型对应的柔体所需要的调节参数传送给GPU;GPU利用CPU传送的点的位置信息和调节参数模拟所述柔体模型对应的柔体。这样,由GPU模拟真实世界中的柔体,既能实现模拟真实世界中的柔体,又能不使柔体解算过程为客户端计算带来巨大压力。
附图说明
图1为本发明实施例提供的方法流程图;
图2为本发明实施例提供的柔体结构示意图;
图3为本发明实施例提供的步骤103实现流程图;
图4为本发明实施例提供的柔体随机变化模拟示意图;
图5为本发明实施例提供的柔体与碰撞包围盒的碰撞位置示意图;
图6为本发明实施例提供的柔体碰撞模拟示意图;
图7为本发明实施例提供的装置结构图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。
目前,一些应用场景比如MMORPG游戏场景为体现真实,加入了柔体,但是,这些应用场景没有柔体模块,即使加入了柔体,也不能模拟出柔体的功能。
基于此,本申请提供了一种柔体模拟方法,具体包括图1所示流程。
参见图1,图1为本发明实施例提供的方法流程图。如图1所示,该流程可包括以下步骤:
步骤101,CPU选择场景中需要使用的且满足设定条件的柔体对应的柔体模型,所述满足设定条件的柔体为与场景中人物模型交互次数小于设定值的柔体。
这里,步骤101所述的人物模型可为应用于游戏场景中由玩家操控的人物模型,而非系统操控的人物模型比如NPC人物。
在一些应用场景比如游戏场景中,其虽然引入了柔体,但是,有些柔体比如场景中的装饰如衣服、旗子、布料等等,并不需要与场景中人物模型交互,或者需要与场景中人物模型交互,但交互次数有限,小于设定值(该设定值可根据实际情况设置),本步骤101选择的柔体模型就是这些与场景中人物模型无交互,或者有交互,但交互次数有限小于设定值的柔体对应的柔体模型。
步骤102,CPU针对选择的每一柔体模型执行以下步骤1和步骤2:步骤1,识别该柔体模型在被细分之后得到的多个三角形方格,将所述柔体模型中组成三角形方格的不同点的位置信息传送给图形处理器(GPU);步骤2,将根据需求确定的模拟该柔体模型对应的柔体所需要的调节参数传送给GPU。
在本发明中,作为本发明的一个实施例,可由美术人员基于以下原则细分柔体模型:细分程度越小光滑程度越大的原则。图2示出了以面片作为柔体模型为例柔体模型被细分的示意图。
至于本步骤102中,之所以将所述柔体模型中组成三角形方格的不同点的位置信息传送给GPU,目的是由GPU基于该传送的位置信息模拟柔体,具体见步骤103所述。其中,为节省传送效率,需要保证传送的各个点的位置信息不同。比如两个不同三角形方格相交,有两个交点,则只需把这两个交点的位置信息传送一次即可,不需要重复传送。
至于本步骤102中描述的调节参数,下文给以重点描述,这里暂不赘述。
步骤103,GPU利用CPU传送的点的位置信息和调节参数模拟所述柔体模型对应的柔体。
优选地,本发明中,当GPU接收到CPU传送的点的位置信息时,其会先存储在静态缓冲区(StaticBuffer)内。
至于调节参数GPU收到时也可存储在StaticBuffer。
至于GPU如何利用CPU传送的点的位置信息和调节参数模拟所述柔体模型对应的柔体,其依赖于调节参数。下文进行了举例描述。
优选地,本发明中,作为一个实施例,所述调节参数具体实现时刻包括:
1,基本位移缩放矩阵,与柔体模型对应,用于变换对应的柔体模型的位置比如通过缩、放、平移等方式变换柔体模型的位置;通过基本位移缩放矩阵,可以将柔体模型变换到任何位置,通常,作为一个优选实施例,可以将柔体模型变换至X-Y-Z坐标系的原点,以看做是在原点开始的柔体模型,并且看作柔体模型的长宽分别沿(1,0,0)(0,1,0)。
2,时间t,表示柔体运动起来的时间点;要想让柔体动起来,就要有时间t值,这样才可以让柔体随时间改变而动起来。
基于上面描述的调节参数,则步骤103中,所述GPU利用CPU传送的点的位置信息和调节参数模拟所述柔体模型对应的柔体包括图3所示的流程图:
参见图3,图3为本发明实施例提供的步骤103实现流程图。如图3所示,该流程可包括:
步骤301,利用所述基本位移缩放矩阵将柔体模型变换至X-Y-Z坐标系中的设定位置。
作为本发明的一个优选实施例,本步骤301中的设定位置可为X-Y-Z坐标系中的原点位置。
步骤302,针对CPU传送的每一点的位置信息,计算在时间t时该点发生运动后最终的位置信息;
步骤303,GPU基于计算的在时间t时每一点发生运动后最终的位置信息模拟所述柔体模型对应的柔体。
这里,应用于X-Y-Z坐标系中,所述CPU传送的点的位置信息为(Pos.x1、Pos.y1、Pos.z1)。其中,Pos.x1为X-Y-Z坐标系中对应X轴的值、Pos.y1为对应Y轴的值,Pos.z1为对应Z轴的值。这里,CPU传送的点的位置信息为(Pos.x1、Pos.y1、Pos.z1)并非限定一个点的位置信息,其只是CPU传送的点的位置信息的一个举例。
本发明中,优选地,所述调节参数进一步包括:
3,柔体模型的AABB区域,该AABB区域由三维X-Y-Z坐标系内的坐标点AABBMIN和坐标点AABBMAX围成,所述AABBMIN为所述柔体模型在X-Y-Z坐标系中的最小X值、最小Y值、最小Z值组成,所述AABBMAX为所述柔体模型在X-Y-Z坐标系中的最大X值、最大Y值、最大Z值组成;
4,幅度调节值,包含分别应用于X轴、Y轴、Z轴上的幅度调节值;
5,应用于X轴上的频率调节值;
基于此,上述步骤302中,计算在时间t时该点发生运动后最终的位置信息可包括:
步骤01,利用应用于X轴上的幅度调节值、Pos.y1、Pos.z1、时间t、应用于X轴上的频率调节值、AABB区域中对应Y轴的最小值AABB.y、AABB区域中对应Z轴的最小值AABB.z计算在时间t时该点发生运动后最终对应X轴的值Pos.x2;
步骤02,利用应用于Y轴上的幅度调节值、Pos.y1计算在时间t时该点发生运动后最终对应Y轴的值Posy2;
步骤03,利用应用于Z轴上的幅度调节值、Pos.z1计算在时间t时该点发生运动后最终对应Z轴的值Posz2。
具体地,对应步骤01,所述Pos.x2通过以下公式实现:
Pos.x2=a1*sin(Pos.y1*t*f1)*(AABB.y-Pos.y1)+
a2*cos(Pos.z1*t*f2)*(AABB.z-Pos.z1);
其中,a1、a2为应用于X轴上不同方向的幅度调节值,f1、f2为应用于X轴上不同方向的频率调节值;
对应步骤02,所述Pos.y2通过以下公式实现:Pos.y2=b*Pos.y1。b为应用于Y轴上的幅度调节值。
对应步骤03,所述Pos.z2通过以下公式实现:Pos.z2=c*Pos.z1。c为应用于Z轴上的幅度调节值。
至此,通过上面描述,就可计算出在时间t时CPU传送的每一点因为发生运动而最终的位置信息。
优选地,本发明中,为了增加柔体的随机性,从而让柔体产生一些随机变化,使得柔体模拟更加逼真,则所述调节参数可进一步包括:
6,随机点的位置信息和该随机点的位置信息对应的随机变化幅度d;
基于随机点的位置信息和该随机点的位置信息对应的随机变化幅度d,则GPU可以模拟柔体的随机变化,具体为:
步骤A1,确定时间t时每一点发生运动后最终的位置信息(Pos.x2、Pos.y2、Pos.z2)组成的第一向量。
这里,第一向量可记为Pos.x2y2z2。
步骤A2,针对每一随机点的位置信息(x、y、z),执行以下步骤:
步骤A21,利用该随机点的位置信息(x、y、z)计算该随机点至X-Y-Z坐标系中原点的第一位置距离,并确定该随机点的位置信息(x、y、z)组成的第二向量;
这里,第一位置距离记为dis1,
dis1=pow((x*x+y*y+z*z),0.5);
第二向量记为Pos.xyz。
步骤A22,计算第一向量和第二向量之差得到向量差,计算所述向量差至所述原点的第二位置距离;
这里,第一向量和第二向量之差得到向量差记为dif,
dif1=Pos.x2y2z2-Pos.xyz;
第二位置距离记为dis2,
dis2=pow((dif.x*dif.x+dif.y*dif.y+dif.z*dif.z),0.5);
步骤A23,比较第一位置距离与第二位置距离,如果前者大于后者,则将Pos.x2更新为Pos.x2+随机点的位置信息对应的随机变化幅度d*第二位置距离/第一位置距离,Pos.y2、Pos.z2不变,否则,维持Pos.x2、Pos.y2、、Pos.z2不变;
步骤A3,在执行完步骤A2之后,利用时间t时每一点发生运动后最终的位置信息(Pos.x2、Pos.y2、Pos.z2)模拟所述柔体模型对应的柔体的随机变化。
以图2所示的柔体为例,则图4示出了该柔体的随机变化示意图。
优选地,本发明中,为了能实现柔体的碰撞功能GPU还可以模拟柔体的碰撞。
其中,为了便于GPU还可以模拟柔体的碰撞,所述调节参数进一步包括:
7,碰撞包围盒信息。
基于碰撞包围盒信息,则GPU模拟柔体的碰撞具体为:
步骤B1,基于碰撞包围盒信息确定时间t时每一点发生运动后最终的位置信息(Pos.x2、Pos.y2、Pos.z2)是否在碰撞包围盒内,如果是,将Pos.x2更新为0,Pos.y2、Pos.z2不变,将Pos.y2、Pos.z2、以及更新后的Pos.x2对应的位置确定为碰撞位置。
基于图2所示的柔体,则图5示出的碰撞位置就为图5中的黑色区域。
步骤B2,基于碰撞包围盒信息将碰撞位置更新为沿碰撞包围盒方向的位置模拟所述柔体模型对应的柔体的碰撞。
基于图2所示的柔体,则图6模拟出了柔体的碰撞。
作为本发明的一个实施例,所述碰撞包围盒信息可包括:
碰撞包围盒的类型;
碰撞包围盒的参数。
其中,碰撞包围盒的类型具体实现时可为AABB包围盒、OBB包围盒、圆形包围盒等等。
不同的碰撞包围盒的类型,其对应的碰撞包围盒的参数就不同。
以碰撞包围盒的类型为圆形包围盒为例,则碰撞包围盒的参数就包括:圆形中心点的位置信息(x0、y0、z0)、圆形半径r。
再比如AABB包围盒为例,则碰撞包围盒的参数就包括:AABBMIN、AABBMAX等。
下面以碰撞包围盒的类型为圆形为例,其他情况原理类似,则上面步骤B1中,基于碰撞包围盒信息确定时间t时每一点发生运动后最终的位置信息(Pos.x2、Pos.y2、Pos.z2)是否在碰撞包围盒内包括:
针对时间t时每一点发生运动后最终的位置信息(Pos.x2、Pos.y2、Pos.z2)执行以下步骤:
计算位置信息(Pos.x2、Pos.y2、Pos.z2)组成的向量与圆形中心点的位置信息(x0、y0、z0)组成的向量之差dif2;
计算dif2至三维X-Y-Z坐标系内原点的距离dis3;
如果dis3小于圆形半径r,则确定位置信息(Pos.x2、Pos.y2、Pos.z2)在碰撞包围盒内,反之,确定位置信息(Pos.x2、Pos.y2、Pos.z2)不在碰撞包围盒内。
以上对GPU模拟柔体的一些基础功能进行了描述。优选地,本发明中,本领域技术人员还可以根据需求加入更多功能,例如加入运动方向,这样可以在运动方向上模拟的更加逼真。
需要说明的是,在本发明中,针对一些不满足设定条件的柔体,则需要CPU或者需要CPU和GPU一起完成模拟,这样既满足了需求,又可以增加效率。其中,CPU模拟柔体的实现方法与现有物理世界上柔体的实现原理类似,这里不再一一赘述。
以上对本发明提供的方法进行了描述,下面对本发明实施例提供的装置进行描述:
参见图7,图7为本发明实施例提供的装置结构图。如图7所示,该装置包括:CPU和GPU;
其中,CPU包括:
选择单元,用于选择场景中需要使用的且满足设定条件的柔体对应的柔体模型,所述满足设定条件的柔体为与场景中人物模型交互次数小于设定值的柔体;
处理单元,用于针对选择的每一柔体模型执行以下步骤1和步骤2:步骤1,识别该柔体模型在被细分之后得到的多个三角形方格,将所述柔体模型中组成三角形方格的不同点的位置信息传送给图形处理器GPU;步骤2,将根据需求确定的模拟该柔体模型对应的柔体所需要的调节参数传送给GPU;
GPU包括:
接收单元,用于接收CPU传送的点的位置信息和调节参数;
模拟单元,用于利用CPU传送的点的位置信息和调节参数模拟所述柔体模型对应的柔体。
优选地,本发明中,所述调节参数包括:
基本位移缩放矩阵,与柔体模型对应,用于变换对应的柔体模型的位置;
时间t,表示柔体运动起来的时间点;
所述模拟单元通过以下步骤利用CPU传送的点的位置信息和调节参数模拟所述柔体模型对应的柔体:
利用所述基本位移缩放矩阵将柔体模型变换至X-Y-Z坐标系中的设定位置;
针对CPU传送的每一点的位置信息,计算在时间t时该点发生运动后最终的位置信息;
GPU基于计算的在时间t时每一点发生运动后最终的位置信息模拟所述柔体模型对应的柔体。
优选地,本发明中,所述CPU传送的点的位置信息包括X-Y-Z坐标系中对应X轴的值Pos.x1、对应Y轴的值Pos.y1,对应Z轴的值Pos.z1;
所述设定位置为X-Y-Z坐标系中的原点位置;
所述调节参数进一步包括:
柔体模型的AABB区域,由三维X-Y-Z坐标系内的坐标点AABBMIN和坐标点AABBMAX围成,所述AABBMIN为所述柔体模型在X-Y-Z坐标系中的最小X值、最小Y值、最小Z值组成,所述AABBMAX为所述柔体模型在X-Y-Z坐标系中的最大X值、最大Y值、最大Z值组成;
幅度调节值,包含分别应用于X轴、Y轴、Z轴上的幅度调节值;
应用于X轴上的频率调节值;
基于此,所述计算在时间t时该点发生运动后最终的位置信息包括:
利用应用于X轴上的幅度调节值、Pos.y1、Pos.z1、时间t、应用于X轴上的频率调节值、AABB区域中对应Y轴的最小值AABB.y、AABB区域中对应Z轴的最小值AABB.z计算在时间t时该点发生运动后最终对应X轴的值Pos.x2;
利用应用于Y轴上的幅度调节值、Pos.y1计算在时间t时该点发生运动后最终对应Y轴的值Posy2;
利用应用于Z轴上的幅度调节值、Pos.z1计算在时间t时该点发生运动后最终对应Z轴的值Posz2。
优选地,本发明中,所述Pos.x2通过以下公式实现:
Pos.x2=a1*sin(Pos.y1*t*f1)*(AABB.y-Pos.y1)+
a2*cos(Pos.z1*t*f2)*(AABB.z-Pos.z1);
所述Pos.y2通过以下公式实现:Pos.y2=b*Pos.y1;
所述Pos.z2通过以下公式实现:Pos.z2=c*Pos.z1;
其中,a1、a2为应用于X轴上不同方向的幅度调节值,f1、f2为应用于X轴上不同方向的频率调节值;b为应用于Y轴上的幅度调节值,c为应用于Z轴上的幅度调节值。
优选地,本发明中,所述调节参数进一步包括:
随机点的位置信息和该随机点的位置信息对应的随机变化幅度d;
所述模拟单元进一步通过以下步骤模拟所述柔体模型对应的柔体的随机变化:
步骤A1,确定时间t时每一点发生运动后最终的位置信息(Pos.x2、Pos.y2、Pos.z2)组成的第一向量;
步骤A2,针对每一随机点的位置信息(x、y、z),执行以下步骤:
利用该随机点的位置信息(x、y、z)计算该随机点至X-Y-Z坐标系中原点的第一位置距离,并确定该随机点的位置信息(x、y、z)组成的第二向量;
计算第一向量和第二向量之差得到向量差,计算所述向量差至所述原点的第二位置距离;
比较第一位置距离与第二位置距离,如果前者大于后者,则将Pos.x2更新为Pos.x2+随机点的位置信息对应的随机变化幅度d*第二位置距离/第一位置距离,Pos.y2、Pos.z2不变,否则,维持Pos.x2、Pos.y2、、Pos.z2不变;
步骤A3,在执行完步骤A2之后,利用时间t时每一点发生运动后最终的位置信息(Pos.x2、Pos.y2、Pos.z2)模拟所述柔体模型对应的柔体的随机变化。
优选地,本发明中,所述调节参数进一步包括:碰撞包围盒信息;
所述模拟单元进一步通过以下步骤模拟所述柔体模型对应的柔体的碰撞:
基于碰撞包围盒信息确定时间t时每一点发生运动后最终的位置信息(Pos.x2、Pos.y2、Pos.z2)是否在碰撞包围盒内,如果是,将Pos.x2更新为0,Pos.y2、Pos.z2不变,将Pos.y2、Pos.z2、以及更新后的Pos.x2对应的位置确定为碰撞位置;
基于碰撞包围盒信息将碰撞位置更新为沿碰撞包围盒方向的位置模拟所述柔体模型对应的柔体的碰撞。
优选地,本发明中,所述碰撞包围盒信息包括:
碰撞包围盒的类型;
碰撞包围盒的参数;
其中,在碰撞包围盒的类型为圆形时,碰撞包围盒的参数包括:圆形中心点的位置信息(x0、y0、z0)、圆形半径r;
在碰撞包围盒的类型为圆形时,所述模拟单元基于碰撞包围盒信息确定时间t时每一点发生运动后最终的位置信息(Pos.x2、Pos.y2、Pos.z2)是否在碰撞包围盒内包括:
针对时间t时每一点发生运动后最终的位置信息(Pos.x2、Pos.y2、Pos.z2)执行以下步骤:
计算位置信息(Pos.x2、Pos.y2、Pos.z2)组成的向量与圆形中心点的位置信息(x0、y0、z0)组成的向量之差dif;
计算dif至三维X-Y-Z坐标系内原点的dis;
如果dis小于圆形半径r,则确定位置信息(Pos.x2、Pos.y2、Pos.z2)在碰撞包围盒内,反之,确定位置信息(Pos.x2、Pos.y2、Pos.z2)不在碰撞包围盒内。
至此,完成图7所示的装置描述。
由以上技术方案可以看出,本发明中,通过CPU选择场景中需要使用的且满足设定条件的柔体对应的柔体模型,CPU针对选择的每一柔体模型执行以下步骤1和步骤2:步骤1,识别该柔体模型在被细分之后得到的多个三角形方格,将所述柔体模型中组成三角形方格的不同点的位置信息传送给图形处理器GPU;步骤2,将根据需求确定的模拟该柔体模型对应的柔体所需要的调节参数传送给GPU;GPU利用CPU传送的点的位置信息和调节参数模拟所述柔体模型对应的柔体。这样,由GPU模拟真实世界中的柔体,既能实现模拟真实世界中的柔体,又能不使柔体解算过程为客户端计算带来巨大压力。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。
Claims (4)
1.一种基于应用的柔体模拟方法,其特征在于,该方法包括:
CPU选择场景中需要使用的且满足设定条件的柔体对应的柔体模型,所述满足设定条件的柔体为与场景中人物模型交互次数小于设定值的柔体;
CPU针对选择的每一柔体模型执行以下步骤1和步骤2:步骤1,识别该柔体模型在被细分之后得到的多个三角形方格,将所述柔体模型中组成三角形方格的不同点的位置信息传送给图形处理器GPU;步骤2,将根据需求确定的模拟该柔体模型对应的柔体所需要的调节参数传送给GPU;所述调节参数包括:基本位移缩放矩阵,与柔体模型对应,用于变换对应的柔体模型的位置;时间t,表示柔体运动起来的时间点;碰撞包围盒信息;
GPU利用CPU传送的点的位置信息和调节参数模拟所述柔体模型对应的柔体,具体包括:利用所述基本位移缩放矩阵将柔体模型变换至X-Y-Z坐标系中的设定位置;针对CPU传送的每一点的位置信息,计算在时间t时该点发生运动后最终的位置信息;GPU基于计算的在时间t时每一点发生运动后最终的位置信息模拟所述柔体模型对应的柔体;
GPU基于碰撞包围盒信息模拟柔体的碰撞,具体为:基于碰撞包围盒信息确定时间t时每一点发生运动后最终的位置信息(Pos.x2、Pos.y2、Pos.z2)是否在碰撞包围盒内,如果是,将Pos.x2更新为0,Pos.y2、Pos.z2不变,将Pos.y2、Pos.z2、以及更新后的Pos.x2对应的位置确定为碰撞位置;基于碰撞包围盒信息将碰撞位置更新为沿碰撞包围盒方向的位置模拟所述柔体模型对应的柔体的碰撞;所述CPU传送的点的位置信息包括X-Y-Z坐标系中对应X轴的值Pos.x1、对应Y轴的值Pos.y1,对应Z轴的值Pos.z1;
所述设定位置为X-Y-Z坐标系中的原点位置;
所述调节参数进一步包括:
柔体模型的AABB区域,由三维X-Y-Z坐标系内的坐标点AABBMIN和坐标点AABBMAX围成,所述AABBMIN为所述柔体模型在X-Y-Z坐标系中的最小X值、最小Y值、最小Z值组成,所述AABBMAX为所述柔体模型在X-Y-Z 坐标系中的最大X值、最大Y值、最大Z值组成;
幅度调节值,包含分别应用于X轴、Y轴、Z轴上的幅度调节值;
应用于X轴上的频率调节值;
所述计算在时间t时该点发生运动后最终的位置信息包括:
利用应用于X轴上的幅度调节值、Pos.y1、Pos.z1、时间t、应用于X轴上的频率调节值、AABB区域中对应Y轴的最小值AABB.y、AABB区域中对应Z轴的最小值AABB.z计算在时间t时该点发生运动后最终对应X轴的值Pos.x2;
利用应用于Y轴上的幅度调节值、Pos.y1计算在时间t时该点发生运动后最终对应Y轴的值Posy2;
利用应用于Z轴上的幅度调节值、Pos.z1计算在时间t时该点发生运动后最终对应Z轴的值Posz2;
所述调节参数进一步包括:随机点的位置信息和该随机点的位置信息对应的随机变化幅度d;
该方法进一步包括:
步骤A1,确定时间t时每一点发生运动后最终的位置信息(Pos.x2、Pos.y2、Pos.z2)组成的第一向量;
步骤A2,针对每一随机点的位置信息(x、y、z),执行以下步骤:
利用该随机点的位置信息(x、y、z)计算该随机点至X-Y-Z坐标系中原点的第一位置距离,并确定该随机点的位置信息(x、y、z)组成的第二向量;
计算第一向量和第二向量之差得到向量差,计算所述向量差至所述原点的第二位置距离;
比较第一位置距离与第二位置距离,如果前者大于后者,则将Pos.x2更新为Pos.x2+随机点的位置信息对应的随机变化幅度d*第二位置距离/第一位置距离,Pos.y2、Pos.z2不变,否则,维持Pos.x2、Pos.y2、Pos.z2不变;
步骤A3,在执行完步骤A2之后,利用时间t时每一点发生运动后最终的位置信息(Pos.x2、Pos.y2、Pos.z2)模拟所述柔体模型对应的柔体的随机变化。
2.根据权利要求1所述的方法,其特征在于,所述Pos.x2通过以下公式实 现:
Pos.x2=a1*sin(Pos.y1*t*f1)*(AABB.y-Pos.y1)+
a2*cos(Pos.z1*t*f2)*(AABB.z-Pos.z1);
所述Pos.y2通过以下公式实现:Pos.y2=b*Pos.y1;
所述Pos.z2通过以下公式实现:Pos.z2=c*Pos.z1;
其中,a1、a2为应用于X轴上不同方向的幅度调节值,f1、f2为应用于X轴上不同方向的频率调节值;b为应用于Y轴上的幅度调节值,c为应用于Z轴上的幅度调节值。
3.根据权利要求1所述的方法,其特征在于,所述碰撞包围盒信息包括:
碰撞包围盒的类型;
碰撞包围盒的参数;
其中,在碰撞包围盒的类型为圆形时,碰撞包围盒的参数包括:圆形中心点的位置信息(x0、y0、z0)、圆形半径r;
在碰撞包围盒的类型为圆形时,所述基于碰撞包围盒信息确定时间t时每一点发生运动后最终的位置信息(Pos.x2、Pos.y2、Pos.z2)是否在碰撞包围盒内包括:
针对时间t时每一点发生运动后最终的位置信息(Pos.x2、Pos.y2、Pos.z2)执行以下步骤:
计算位置信息(Pos.x2、Pos.y2、Pos.z2)组成的向量与圆形中心点的位置信息(x0、y0、z0)组成的向量之差dif;
计算dif至三维X-Y-Z坐标系内原点的dis;
如果dis小于圆形半径r,则确定位置信息(Pos.x2、Pos.y2、Pos.z2)在碰撞包围盒内,反之,确定位置信息(Pos.x2、Pos.y2、Pos.z2)不在碰撞包围盒内。
4.一种基于应用的柔体模拟装置,其特征在于,该装置包括:CPU和GPU;
其中,CPU包括:
选择单元,用于选择场景中需要使用的且满足设定条件的柔体对应的柔体模 型,所述满足设定条件的柔体为与场景中人物模型交互次数小于设定值的柔体;
处理单元,用于针对选择的每一柔体模型执行以下步骤1和步骤2:步骤1,识别该柔体模型在被细分之后得到的多个三角形方格,将所述柔体模型中组成三角形方格的不同点的位置信息传送给图形处理器GPU;步骤2,将根据需求确定的模拟该柔体模型对应的柔体所需要的调节参数传送给GPU;所述调节参数包括:基本位移缩放矩阵,与柔体模型对应,用于变换对应的柔体模型的位置;时间t,表示柔体运动起来的时间点;碰撞包围盒信息;
GPU包括:
接收单元,用于接收CPU传送的点的位置信息和调节参数;
模拟单元,用于利用CPU传送的点的位置信息和调节参数模拟所述柔体模型对应的柔体,具体为:利用所述基本位移缩放矩阵将柔体模型变换至X-Y-Z坐标系中的设定位置;针对CPU传送的每一点的位置信息,计算在时间t时该点发生运动后最终的位置信息;GPU基于计算的在时间t时每一点发生运动后最终的位置信息模拟所述柔体模型对应的柔体;
以及,用于基于碰撞包围盒信息模拟柔体的碰撞,具体为:基于碰撞包围盒信息确定时间t时每一点发生运动后最终的位置信息(Pos.x2、Pos.y2、Pos.z2)是否在碰撞包围盒内,如果是,将Pos.x2更新为0,Pos.y2、Pos.z2不变,将Pos.y2、Pos.z2、以及更新后的Pos.x2对应的位置确定为碰撞位置;基于碰撞包围盒信息将碰撞位置更新为沿碰撞包围盒方向的位置模拟所述柔体模型对应的柔体的碰撞;所述调节参数进一步包括:
随机点的位置信息和该随机点的位置信息对应的随机变化幅度d;
所述模拟单元进一步通过以下步骤模拟所述柔体模型对应的柔体的随机变化:
步骤A1,确定时间t时每一点发生运动后最终的位置信息(Pos.x2、Pos.y2、Pos.z2)组成的第一向量;
步骤A2,针对每一随机点的位置信息(x、y、z),执行以下步骤:
利用该随机点的位置信息(x、y、z)计算该随机点至X-Y-Z坐标系中原点 的第一位置距离,并确定该随机点的位置信息(x、y、z)组成的第二向量;
计算第一向量和第二向量之差得到向量差,计算所述向量差至所述原点的第二位置距离;
比较第一位置距离与第二位置距离,如果前者大于后者,则将Pos.x2更新为Pos.x2+随机点的位置信息对应的随机变化幅度d*第二位置距离/第一位置距离,Pos.y2、Pos.z2不变,否则,维持Pos.x2、Pos.y2、Pos.z2不变;
步骤A3,在执行完步骤A2之后,利用时间t时每一点发生运动后最终的位置信息(Pos.x2、Pos.y2、Pos.z2)模拟所述柔体模型对应的柔体的随机变化。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310741531.1A CN103745500B (zh) | 2013-12-27 | 2013-12-27 | 基于应用的柔体模拟方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310741531.1A CN103745500B (zh) | 2013-12-27 | 2013-12-27 | 基于应用的柔体模拟方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103745500A CN103745500A (zh) | 2014-04-23 |
CN103745500B true CN103745500B (zh) | 2017-02-15 |
Family
ID=50502515
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310741531.1A Active CN103745500B (zh) | 2013-12-27 | 2013-12-27 | 基于应用的柔体模拟方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103745500B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101093586A (zh) * | 2007-07-12 | 2007-12-26 | 上海交通大学 | 面向复杂场景实时交互操作的并行碰撞检测方法 |
CN101398942A (zh) * | 2008-04-24 | 2009-04-01 | 中山大学 | 三维试衣仿真系统 |
-
2013
- 2013-12-27 CN CN201310741531.1A patent/CN103745500B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101093586A (zh) * | 2007-07-12 | 2007-12-26 | 上海交通大学 | 面向复杂场景实时交互操作的并行碰撞检测方法 |
CN101398942A (zh) * | 2008-04-24 | 2009-04-01 | 中山大学 | 三维试衣仿真系统 |
Non-Patent Citations (3)
Title |
---|
Deformation constraints in a mass-spring model to describe;Provot X.;《Proceedings of Graphics Interface》;19951231;147-155 * |
基于弹簧—质点模型的快速布料仿真研究;冯广慧;《中国优秀硕士学位论文全文数据库 信息科技辑 》;20070815(第2期);第2.1节第2段,第2.2节第1段,图2-4,第2.2.1节第1段,第2.3节,第4.3.1节第1-2段 * |
基于粒子系统的动态景物模拟;吴国宝;《中国优秀硕士学位论文全文数据库 信息科技辑》;20120915(第9期);第2章第2.2.3节第(2)部分 * |
Also Published As
Publication number | Publication date |
---|---|
CN103745500A (zh) | 2014-04-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101473351B (zh) | 肌肉与骨骼形状蒙皮 | |
CN104680573B (zh) | 一种基于三角网格简化的纹理映射方法 | |
CN105976418A (zh) | 一种人物动态骨骼的设计系统和方法 | |
CN106934192B (zh) | 一种参数优化的浅水方程模型水体建模方法 | |
CN106066688B (zh) | 一种基于穿戴式手套的虚拟现实交互方法及装置 | |
CN105069826A (zh) | 弹性物体变形运动的建模方法 | |
CN104821006A (zh) | 一种基于人体混合包围盒的动态服装仿真方法 | |
CN102385754B (zh) | 一种物体跟踪方法和设备 | |
US20100070246A1 (en) | System and method for real-time cloth simulation | |
JP2019121388A (ja) | 仮想現実の長距離相互作用のためのシステム及び方法 | |
Alam et al. | Searching mobile nodes using modified column mobility model | |
CN107704667A (zh) | 模拟集群性的人群运动仿真方法、装置和系统 | |
CN103745500B (zh) | 基于应用的柔体模拟方法和装置 | |
Ota et al. | 1/f/sup/spl beta//noise-based real-time animation of trees swaying in wind fields | |
CN111459280B (zh) | Vr空间扩展方法、装置、设备及存储介质 | |
CN105892680A (zh) | 基于虚拟现实头盔的交互设备控制方法及装置 | |
KR20190028634A (ko) | 디지털 크리쳐의 제작 방법 및 전자장치 | |
CN104869160A (zh) | 一种基于云平台的分布式虚拟现实系统 | |
US9111391B2 (en) | Image generating device, image generating method, and non-transitory information storage medium | |
CN110717297B (zh) | 织物仿真模型的建立方法、系统、存储介质及电子设备 | |
CN107094284A (zh) | 一种基于谱聚类算法的机会网络群组移动方法 | |
CN103853044A (zh) | 一种基于径向基函数的交互式群组控制方法 | |
CN102930586A (zh) | 一种基于线性旋转不变微分坐标的可交互几何变形方法 | |
CN107018399A (zh) | 图像数据传输方法及装置 | |
CN101866494A (zh) | 一种利用网格顶点对角色模型进行分割的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |