一种基于接口标记的三维模型碰撞检测方法与流程

文档序号:14250676阅读:283来源:国知局
一种基于接口标记的三维模型碰撞检测方法与流程

本发明涉及三维模型虚拟搭建软件技术领域,特别涉及一种基于接口标记的三维模型碰撞检测方法。



背景技术:

近年来,随着社会的迅速进步和人民生活水平的提高,积木教育作为一种新兴的教育方式被越来越多的家长与孩子所接受。积木作为一项艺术创作活动,是益智玩具中的经典,其最大的特点就在于自己动手实现创意。积木通过不同的组合可以千变万化,孩子需要在手部肌肉运用的基础上,根据脑海或现实中的表象选择不同的积木以不同的方式连接起来,最终整合自己的积木作品。这不仅能满足孩子想象力和任意组合搭建的结构特性,更能很好的锻炼孩子的认知、动手、创造能力。由于实体积木数量众多,一次性全部购买成本过高,3d积木虚拟搭建软件应运而生,它允许用户使用不同积木组合拼接搭建出独特的积木模型,可以赋予积木不同的颜色和贴图,生成积木模型的搭建步骤,渲染积木模型效果图分享给朋友,最后还可以根据模型的积木清单去商城下单购买实体积木。积木厂商可以通过3d积木虚拟搭建软件进行宣传推广,吸引用户安装软件和购买实体积木,同时组织积木教育活动或相关比赛。

3d积木虚拟搭建软件的一个技术难点在于积木在移动拼接过程中的碰撞检测,以决定移动积木能否在该位置放置或拼接。现有三维模型碰撞检测方法主要使用积木3d模型的网格碰撞器来检测碰撞的进入或离开。由于积木模型的复杂性,导致积木3d模型的渲染面数众多,直接使用网格碰撞器会导致计算机的资源被严重占用,当场景积木数量达到一定级别后,软件会出现操作缓慢,出现明显卡顿现象。同时部分3d引擎在检测碰撞触发时,由于网格碰撞器过于复杂,渲染凸面过多,它会替代使用积木的边界框去检测碰撞触发,这导致碰撞检测不够精确。



技术实现要素:

本发明的目的在于克服现有技术的缺点与不足,提供一种基于接口标记的三维模型碰撞检测方法,可以适用各种形状不同的3d积木模型,使用人工标记碰撞检测接口的方法,替代使用积木3d模型自带的网格碰撞器,耗费计算资源更少,并且碰撞检测更灵活和精确。

本发明的目的通过以下的技术方案实现:一种基于接口标记的三维模型碰撞检测方法,包括以下步骤:

(a)人工标记积木接口,并进行接口分类;

(b)积木接口触发器检测积木触发碰撞进入,记录被碰撞接口信息,维护碰撞接口列表;

(c)积木接口触发器检测积木触发碰撞离开,维护碰撞接口列表;

(d)若步骤(b)或(c)中,被触发碰撞的接口属于实类型接口,遍历积木所有接口确定积木新状态;

(e)若步骤(d)得到的积木新状态与当前状态不一样,遍历所有选中积木确定选中积木的新状态;

(f)若步骤(e)得到的选中积木的新状态与当前状态不一样,更新所有选中积木状态。

优选的,步骤(a)中,使用立方体标记积木可以拼接的接口,并根据接口形状的不同设置不同的接口类型,立方体大小与积木模型的接口贴合;接口作为积木的子物体,并分别为积木和接口定义对应的标签;根据接口是否会形成阻挡,将积木拼接接口分为实类型接口和虚类型接口,其中实类型接口指所有会形成阻挡的接口类型的集合,虚类型指所有不会形成阻挡的接口类型的集合;另外定义一种特殊类型接口,覆盖在积木外表,用于替代积木的网格碰撞器来检测碰撞信息;特殊类型接口不能跟其他接口有重叠,特殊类型接口也属于实类型接口;

积木状态分为碰撞状态和非碰撞状态两种:碰撞状态表示选中积木与其他积木发生碰撞,不能放置在当前位置,也不能与其他积木拼接;非碰撞状态表示选中积木没有跟其他积木发生碰撞,可以放置在当前位置,可以与其他积木拼接。

优选的,步骤(b)具体包括:

(b-1)获取触发碰撞物体的标签,判断是否是接口;

(b-2)若触发碰撞物体是接口,获取接口对应的积木,判断积木是否属于被选中积木;

(b-3)若积木不属于被选中积木,分别获取两个发生碰撞的接口对应的积木的边界框;

(b-4)计算两个边界框重叠部分的体积,再计算重叠部分体积与较大那个接口体积的比值;

(b-5)若体积比值大于设定阈值,认为两个接口发生碰撞,否则认为两个接口没发生碰撞;

(b-6)如果认为两个接口发生碰撞,获取两个接口的类型,如果两个接口都属于实类型接口,则在实类型接口碰撞列表中增加记录碰撞接口信息,继续步骤(d)进一步判断积木状态是否发生改变;否则在虚类型接口碰撞列表中增加记录碰撞接口信息,积木状态不变。

具体的,步骤(b)中,因为两个积木靠近时,有可能触发碰撞进入,因此需要在碰撞处理方法中继续判断两个积木接口边界框的重叠程度,以确定两个积木接口是否真的发生碰撞;两个接口的边界框都是轴对齐的长方体,因此重叠部分也是轴对齐的长方体,重叠部分体积的计算方法是:分别将两个边界框投影到o-xyz坐标空间的xoy、yoz、zox三个平面,边界框在每个平面上的投影都是矩形,计算两个矩形的相交矩形,xoy、yoz、zox三个平面的相交矩形就是两个边界框重叠部分的长方体在三个平面上的投影,从三个面的投影可以得知长方体的长、宽、高,从而计算出两个接口边界框重叠部分的体积,再计算重叠部分体积与较大那个接口体积的比值,如果超过设定阈值,认为发生碰撞。

优选的,步骤(c)具体包括:

(c-1)获取触发碰撞物体的标签,判断是否是接口;

(c-2)若触发碰撞物体是接口,获取接口对应的积木,判断触发碰撞积木是否属于被选中积木;

(c-3)若积木不属于被选中积木,获取两个接口的类型;

(c-4)如果两个接口都属于实类型接口,则从实类型接口碰撞列表中删除对应碰撞接口信息,继续步骤(d)进一步判断积木状态是否发生改变;否则在虚类型接口碰撞列表中删除对应碰撞接口信息,积木状态不变。

优选的,步骤(d)具体包括:

(d-1)若步骤(b)或步骤(c)中,触发碰撞的两个接口都属于实类型接口,继续判断积木其他接口的碰撞信息以确定积木的新状态;

(d-2)遍历主动碰撞接口对应的选中积木的所有接口;

(d-3)检查每个接口的实类型碰撞列表中的被碰撞接口,若该主动移动的接口不被本积木的接口拼接,认为积木处于被碰撞状态,否则认为积木处于非碰撞状态;

(d-4)检查本积木当前状态,若当前状态与步骤(d-3)中积木的新状态不一致,继续权步骤(e)处理判断积木状态是否应该发生改变。

优选的,步骤(e)中,由于所有选中积木的状态要始终保持一致,所以循环检查每个选中积木的新状态,若所有选中积木的新状态都是非碰撞状态,则确定选中积木的新状态为非碰撞状态;否则,只要有一个选中积木的新状态为碰撞状态,所有选中积木的新状态都为碰撞状态。

优选的,步骤(f)中,若选中积木当前状态跟新状态不一致,则更新所有选中积木的状态为新状态。

本发明与现有技术相比,具有如下优点和有益效果:

现有的三维模型碰撞检测方法使用积木3d模型的网格碰撞器,渲染面数过多导致计算机资源消耗严重,处理速度慢,同时存在碰撞检测不精确的问题。本发明使用接口标记的方法,用多个简单接口的碰撞器替代积木网格碰撞器检测碰撞的触发,不受模型渲染面数的影响,可以处理复杂的积木模型。同时碰撞器的触发区域不再是模型的边界框范围,而是多个长方体接口覆盖的空间的组合,碰撞检测更精确。由于每个接口都是简单的长方体,只有6个渲染面,因此在碰撞触发时的计算量远远比积木渲染面数众多的网格渲染器的要小,处理速度更快,场景中可以放置更多的积木而不出现明显卡顿的现象,软件操作更流畅,用户体验会更好。

附图说明

图1是实施例中实接口的示意图。

图2是实施例中虚接口的示意图。

图3是实施例方法的流程图。

图4是普通接口示意图。

图5是特殊类型接口示意图。

具体实施方式

下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。

实施例

在3d积木虚拟搭建软件中,用户选中一个或多个积木在底板上任意移动和放置,或去拼接其他积木,从而搭建出独特的3d模型或场景,在积木移动放置和拼接的过程中,采用基于接口标记的3d积木碰撞检测方法,判断被选中积木在该位置是否跟其他积木发生碰撞,从而决定被选中积木是否可以放置或拼接其他积木。

如图1,一种基于接口标记的三维模型碰撞检测方法,包括以下步骤:

在场景中有很多积木,可以通过框选选中一个或多个积木,之后进行拖动可以对选中积木进行移动。

(a)人工标记积木接口,并进行接口分类。

根据接口是否会形成阻挡,将积木拼接接口分为实类型接口和虚类型接口,其中实类型接口指所有会形成阻挡的接口类型的集合,如图1,在物体表面凸出来;虚类型指所有不会形成阻挡的接口类型的集合,如图2,不属于物体但可以与对应实接口拼接(实类型就是会影响到别的物体的,虚类型就是可以被实类型拼接但是不存在实体的)。

步骤(a)中,使用立方体标记积木可以拼接的接口,立方体大小尽可能与积木模型的接口贴合;并根据接口形状的不同设置不同的接口类型,例如a1、a2、b1、b2等接口类型。接口作为积木的子物体,分别为积木和接口定义对应的标签;每个积木都有自己的id,比如0,1,2号积木,接口有不同类型,每个积木下会有一个或多个接口,例如0号积木下有10个a1,10个a2。另外定义一种特殊类型接口,例如接口类型为x,覆盖在积木外表,用于替代积木的网格碰撞器来检测碰撞信息。特殊类型接口不能跟其他接口有重叠(三维物体不能重叠,即所占空间不能重叠)。特殊类型接口也属于实类型接口。图4标记的接口是正常的接口,可以进行拼接以及碰撞的。图5标记的接口是特殊接口,用于描述三维物体没有正常接口的地方。特殊接口无具体标准,只需能描述积木的外形就可以,对积木进行填充。

可以定义两个字符串类型的链表分别存储实类型和虚类型的接口类型,例如a1、b1、x类型属于实类型接口,a2、b2类型属于虚类型接口。如果出现新的接口类型,对应更新两个链表。

每个物体会有一个接口碰撞列表,记录碰撞接口信息。

(b)积木接口触发器检测积木触发碰撞进入(即在移动过程中有两个接口在空间中重叠在一起),记录被碰撞接口信息,维护接口碰撞列表;

步骤(b)是积木接口被碰撞触发时,进行判断处理,步骤(b)包括以下步骤:

(b-1)获取触发碰撞物体的标签,判断是否是接口;

(b-2)若触发碰撞物体是接口,获取接口对应的积木,判断积木是否属于被选中积木;

(b-3)若积木不属于被选中积木(无论选中不选中只要存在就会碰撞,选中积木移动的过程中可能会碰撞到场景中其余的物体),分别获取两个发生碰撞的接口对应的积木的边界框;

(b-4)计算两个边界框重叠部分的体积,再计算重叠部分体积与较大那个接口体积的比值;

(b-5)若体积比值大于设定阈值,认为两个接口发生碰撞,否则认为两个接口没发生碰撞;

(b-6)如果认为两个接口发生碰撞,获取两个接口的类型,如果两个接口都属于实类型接口,则在实类型接口碰撞列表中增加记录碰撞接口信息,继续步骤(d)进一步判断积木状态是否发生改变;否则在虚类型接口碰撞列表中增加记录碰撞接口信息,积木状态不变(只要有一个是虚接口就积木状态不变)。

积木状态分为碰撞状态和非碰撞状态两种。碰撞状态表示选中积木与其他积木发生碰撞,不能放置在当前位置,也不能与其他积木拼接,非碰撞状态表示选中积木没有跟其他积木发生碰撞,可以放置在当前位置,可以与其他积木拼接。

步骤(b)中,因为两个积木靠近时,有可能触发碰撞进入,因此需要在碰撞处理方法中继续判断两个积木接口边界框的重叠程度,以确定两个积木接口是否真的发生碰撞。两个接口的边界框都是轴对齐的长方体,因此重叠部分也是轴对齐的长方体,重叠部分体积的计算方法是:分别将两个边界框投影到o-xyz坐标空间的xoy、yoz、zox三个平面,边界框在每个平面上的投影都是矩形,计算两个矩形的相交矩形,xoy、yoz、zox三个平面的相交矩形就是两个边界框重叠部分的长方体在三个平面上的投影,从三个面的投影可以得知长方体的长、宽、高,从而计算出两个接口边界框重叠部分的体积,再计算重叠部分体积与较大那个接口体积的比值,如果超过设定阈值0.003,认为发生碰撞。例如两个碰撞的接口的体积分别为7和10,重叠部分体积为0.05,则重叠部分体积与较大那个接口体积的比值为0.05/10=0.005,比值大于0.003,认为这两个接口发生碰撞。

(c)积木接口触发器检测积木触发碰撞离开(即之前重叠的接口不再重叠了,其中一个接口移动了),维护接口碰撞列表;

步骤(c)积木接口触发碰撞离开时,进行判断处理,步骤(c)包括以下步骤:

(c-1)获取触发碰撞物体的标签,判断是否是接口;

(c-2)若触发碰撞物体是接口,获取接口对应的积木,判断触发碰撞积木是否属于被选中积木;

(c-3)若积木不属于被选中积木,获取两个接口的类型;

(c-4)如果两个接口都属于实类型接口,则从实类型接口碰撞列表中删除对应碰撞接口信息,继续步骤(d)进一步判断积木状态是否发生改变;否则在虚类型接口碰撞列表中删除对应碰撞接口信息,积木状态不变。

(d)若步骤(b)或(c)中,被触发碰撞的接口属于实类型接口,遍历被触发碰撞的积木所有接口确定积木新状态;

步骤(d)是积木的接口碰撞触发进入或碰撞离开时,接口状态发生了变化,从而要确定对应积木的状态是否需要改变。步骤(d)包括以下步骤:

(d-1)若步骤(b)或步骤(c)中,触发碰撞的两个接口都属于实类型接口,继续判断积木其他接口的碰撞信息以确定积木的新状态;

(d-2)遍历主动碰撞接口对应的选中积木的所有接口;

(d-3)检查每个接口的实类型碰撞列表中的被碰撞接口,若该主动移动的接口不被本积木(指接口的父物体)的接口拼接,认为积木处于被碰撞状态,否则认为积木处于非碰撞状态;

(d-4)检查本积木当前状态,若当前状态与步骤(d-3)中积木的新状态不一致,继续权步骤(e)处理判断积木状态是否应该发生改变。

(e)若步骤(d)得到的积木新状态与当前状态不一样,遍历所有选中积木确定选中积木的新状态;

步骤(e)中,由于所有选中积木的状态要始终保持一致,所以循环检查每个选中积木的新状态,若所有选中积木的新状态都是非碰撞状态,则确定选中积木的新状态为非碰撞状态;否则,只要有一个选中积木的新状态为碰撞状态,所有选中积木的新状态都为碰撞状态;

(f)若步骤(e)得到的选中积木的新状态与当前状态不一样,更新所有选中积木状态。

步骤(f)中,若选中积木当前状态跟新状态不一致,则更新所有选中积木的状态为新状态。

上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。

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