碰撞检测的方法和装置的制作方法

文档序号:6579559阅读:198来源:国知局
专利名称:碰撞检测的方法和装置的制作方法
技术领域
本发明涉及网络游戏领域,特别涉及一种碰撞检测的方法和装置。
背景技术
在游戏中物体的碰撞是经常发生的,怎样检测物体的碰撞是一个很关键的技术问题。尤 其是在飞行射击游戏中,如果不能很好地解决这一问题,会极大地影响玩游戏者的兴趣。碰 揸检测可以探测游戏中各物体的物理边缘,检测出游戏中的各物体是否发生碰撞。当两个3D 物体撞在一起的时候,这种碰撞检测技术可以防止它们相互穿过。例如,当游戏中的人物撞 在墙上的时候,碰撞检测技术会根据人物和墙之间的特性确定两者的位置和相互的作用关系, 从而保证该人物既不会穿墙而过,也不会把墙撞倒。
目前成功商业3D游戏普遍采用的碰撞检测是BSP (Binary Space Partitioning, 二叉空间 分割)树方式及包装盒方式。BSP树是用来控制检测顺序和方向的数据描述,通过找出两个 物体间的分隔面的方法来判断两个物体是否相交,如果分隔面存在,则没有发生碰撞。包装 盒方式就是采用一个描述用的正方体或者球型体包裹住3D物体对象整体,或者是主要部分, 然后根据描述用包装盒的距离、位置等信息来计算是否发生碰撞。该正方体和球型体也可以 由其他形状来代替。
现有的碰撞检测技术是在3D环境中通过计算实现的,这种计算通常都比较复杂,计算 所需的时间也比较长,因此,碰撞检测的效率较低。

发明内容
为了解决现有技术存在的问题,本发明实施例提供了一种碰撞检测的方法和装置。所述
技术方案如下
一种碰撞检测的方法,所述方法包括
为游戏中待检测的第一模型和第二模型分别生成碰撞面片;
获取所述第一模型的碰撞面片中的3D空间信息和所述第二模型的碰撞面片中的3D空间 信息;将获取的3D空间信息转换为2D平面上的图形,分别得到所述第一模型的第一图形和所
述第二模型的第二图形;
检测所述第一图形与第二图形是否相交,如果是,则所述第一模型与第二模型发生碰撞,
否则,所述第一模型与第二模型不发生碰撞。
所述为游戏中待检测的第一模型和第二模型分别生成碰撞面片,具体包括 按照预设的规则,为游戏中待检测的第一模型和第二模型分别生成碰撞面片,所述预设
的规则为碰撞面片的重心与待检测模型的重心的距离不得超过预设的值。
所述预设的规则具体为碰撞面片与待检测模型的面积最大的截面在同一个平面。 所述为游戏中待检测的第一模型和第二模型分别生成碰撞面片之后,还包括 将所述第一模型的碰撞面片和所述第二模型的碰撞面片命名为相同的名字; 获取所述第一模型的碰撞面片中的3D空间信息和所述第二模型的碰撞面片中的3D空间
信息,具体包括
根据所述名字查找所述第一模型和第二模型的碰撞面片,获取所述第一模型的碰撞面片 中的3D空间信息和所述第二模型的碰撞面片中的3D空间信息。 所述第一模型与第二模型发生碰撞之后,还包括
对于所述第一模型和第二模型中的任一个模型,如果该模型所属的物体还包括其它模型, 则不显示该模型,显示所述其它模型。
将获取的3D空间信息转换为2D平面上的图形,具体包括
当所述3D空间信息为3D空间三角形信息时,将获取的3D空间三角形信息转换为2D 平面上的三角形;
当所述3D空间信息为3D空间非三角形信息时,先将所述3D空间非三角形信息转换为 3D空间三角形信息,再将获取该3D空间三角形信息转换为2D平面上的三角形。 一种碰撞检测的装置,所述装置包括
创建模块,为游戏中待检测的第一模型和第二模型分别生成碰撞面片;
获取模块,用于获取所述第一模型的碰撞面片中的3D空间信息和所述第二模型的碰撞 面片中的3D空间信息;
转换模块,用于将所述获取模块获取的3D空间信息转换为2D平面上的图形,分别得到 所述第一模型的第一图形和所述第二模型的第二图形;
检测模块,用于检测所述第一图形与所述第二图形是否相交,如果是,则所述第一模型 与第二模型发生碰撞,否则,所述第一模型与第二模型不发生碰撞。所述创建模块具体包括
创建单元,用于按照预设的规则,为游戏中待检测的第一模型和第二模型分别生成碰撞 面片,所述预设的规则为碰撞面片的重心与待检测模型的重心的距离不得超过预设的值。 所述预设的规则具体为碰撞面片与待检测模型的面积最大的截面在同一个平面。 所述创建模块还包括-
命名单元,用于将所述第一模型的碰撞面片和所述第二模型的碰撞面片命名为相同的名
字;
所述获取模块具体包括
查找单元,用于根据所述名字查找所述第一模型和第二模型的碰撞面片;
获取单元,用于在所述査找单元找到所述第一模型和第二模型的碰撞面片后,获取所述
第一模型的碰撞面片中的3D空间信息和所述第二模型的碰撞面片中的3D空间信息。
所述装置还包括
显示处理模块,用于在所述检测模块判断出所述第一模型与第二模型发生碰撞之后,对 于所述第一模型和第二模型中的任一个模型,如果该任一模型所属的物体还包括其它模型, 则不显示该任一模型,显示所述其它模型。
所述转换模块具体包括-
三角形转换单元,用于当所述获取模块获取的3D空间信息为3D空间三角形信息时,将 该3D空间三角形信息转换为2D平面上的三角形,分别得到所述第一模型的三角形和所述第 二模型的三角形;
非三角形转换单元,当所述获取模块获取的3D空间信息为3D空间非三角形信息时,先 将所述3D空间非三角形信息转换为3D空间三角形信息,再将该3D空间三角形信息转换为 2D平面上的三角形,分别得到所述第一模型的三角形和所述第二模型的三角形。
本发明实施例提供的上述方法和装置,通过将3D模型的碰撞检测转化为2D平面内的图 形的检测,极大地减少了碰撞检测的计算量,縮短了碰撞检测的时间,提高了碰撞检测的效 率。而且,由于碰撞面片是在3D模型中创建的,很容易进行修改,可以通过修改碰撞面片 来实现不同区域的碰撞检测,操作简单、方便。另外,对碰撞面片和模型的相似度的要求不 是很高,可以使用具有一定差异的碰撞面片来进行碰撞检测。当游戏中的物体包括多个模型 时,如果其中一个模型发生碰撞,则其它模型还仍然显示,从而增强了游戏的真实性,提升 了游戏玩家的体验。


图1是本发明实施例提供的对游戏中的多个模型进行检测的示意图2是本发明实施例提供的碰撞检测的方法流程图3是本发明实施例提供的生成碰撞面片的示意图4是本发明实施例提供的判断三角形是否相交的示意图5是本发明实施例提供的碰撞检测的装置一种结构图6是本发明实施例提供的碰撞检测的装置另一种结构图。
具体实施例方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进 一步地详细描述。
本发明实施例提供了一种碰撞检测的方法,包括
为游戏中待检测的第一模型和第二模型分别生成碰撞面片;获取第一模型的碰撞面片中 的3D空间信息和第二模型的碰撞面片中的3D空间信息;将获取的3D空间信息转换为2D 平面上的图形,分别得到第一模型的第一图形和第二模型的第二图形;检测第一图形与第二 图形是否相交,如果是,则第一模型与第二模型发生碰撞,否则,第一模型与第二模型不发 生碰撞。
本发明实施例中涉及的模型是指3D模型,通常为网络游戏中的3D模型。该模型可以使 用多种建模工具生成,如使用3DMAX生成。网络游戏中的物体可以由一个模型组成,也可 以由多个模型组成。例如, 一种大型飞机由机身模型和机翼模型组成等。当一个物体由多个 模型组成时,每个模型都有自己的碰撞面片。
所述碰撞面片是在模型中生成的,该碰撞面片的颜色可以根据需要进行设置,如设置为 与待检测模型不同的颜色。并且,还可以设置碰撞面片的透明度为不同的值,如透明、半透 明、70%透明等等。优选地,为了增强游戏的逼真效果,提升游戏的体验,使用户觉察不到 碰撞检测过程,可以将碰撞面片设置为透明的,对于游戏玩家来说是不可见的,即游戏玩家 在玩游戏的过程中看不到该碰撞面片的存在,该碰撞面片仅是为了碰撞检测而用的,从而避 免了由于用户看到碰撞面片而给游戏体验带来不良的影响。
本发明实施例中为待检测模型生成碰撞面片的步骤可以在初始化时做,即只生成一次石並 撞面片即可,然后在每次运行游戏时,都根据已生成的碰撞面片进行碰撞检测。另外,还可 以在每次运行游戏时,都临时生成碰撞面片,然后再根据本次生成的碰撞面片进行碰撞检测,即生成碰撞面片的动作为多次,每次都重新生成碰撞面片。优选地,为了提高效率,节省资 源,避免不必要的重复,通常采用在初始化时生成碰撞面片的方式。
本发明实施例中的碰撞检测方法可以应用于多个模型的碰撞检测,例如,参见图1,游 戏中有玩家飞机和敌方飞机两类飞机,玩家飞机和敌方飞机均会发射子弹,在游戏过程中, 需要对玩家飞机和子弹与敌方飞机和子弹之间进行碰撞检测。其中,任意两个模型的碰撞检 测的过程均相同,下面以对两个模型进行碰撞检测为例进行具体说明,当对多个模型进行碰 撞检测时,可以重复执行该碰撞检测过程。
参见图2,本发明实施例提供的碰撞检测的方法,具体包括
步骤201:预先为游戏中待检测的第一模型和第二模型分别生成透明的碰撞面片; 其中,第一模型和第二模型的碰撞面片可以按照预设的规则来生成,该预设的规则可以 为碰撞面片的重心与待检测模型的重心的距离不得超过预设的值。当碰撞面片的形状不同 时,该预设的值可以相同,也可以不同,且可以根据需要随时进行修改。优选地,所述预设 的值会根据碰撞面片形状的不同而不同,通常将该值设置得较小,从而保证碰撞面片不会离 模型重心太远,以提高碰撞检测的准确性。例如,待检测模型为三角形,当碰撞面片为三角 形时,该预设的值可以设置为3个像素点,当碰撞面片为正方形时,该预设的值可以设置为 5个像素点等等。
优选地,可以将上述规则设置为碰撞面片与待检测模型的面积最大的截面在同一个平 面。由于待检测模型为3D立体模型,会有多个截面,生成碰撞面片时,按照面积最大的平 面来生成碰撞面片,即碰撞面片与面积最大的平面在同一个平面上,此时碰撞面片的重心与 待检测模型的重心最接近,则保证碰撞面片与待检测模型更接近,包括形状接近和面积接近 等,从而提高碰撞检测的准确性。参见图3,为飞机模型生成的碰撞面片为一个三角形,该 三角形与该飞机模型的机翼部分在同一个平面上。
通常,碰撞面片以三角形来表示, 一个碰撞面片可以包含一个或多个三角形,具体个数 可以根据需要来调整,当碰撞面片包含的三角形个数越多时,其与模型的相似度越高,碰撞 检测的精度也越高,因此,当对碰撞检测的精度要求较高时,可以适当地增加碰撞面片中三 角形的数量。优选地,为了减少碰撞检测时的计算量,在精度能够满足要求的情况下,尽量 使得碰撞面片中包含较少的三角形,即碰撞面片越简单越好。例如,对于图1所示的以俯视
角度观察的游戏,按照图3所示生成的碰撞面片中仅包含一个三角形,极大地减少了碰撞检
测的计算量,而且检测的精度对于该游戏来说也完全能够满足要求。
另外,为了便于确定碰撞检测的范围,搜索碰撞检测的对象,进一步地,还可以将第一模型的碰撞面片和第二模型的碰撞面片命名为相同的名字,使得碰撞检测时,根据该相同的 名字可以搜索到该第一模型的碰撞面片和第二模型的碰撞面片,从而发起对该两个模型的碰 撞检测。在实际应用中,如果对多个模型同时进行碰撞检测,则可以将该多个模型的碰撞面 片均命名为一个相同的名字,在搜索时可以根据该名字搜索到所有符合该名字的待检测的模 型的碰撞面片,从而发起对该多个模型的碰撞检测。
步骤202:当运行游戏时,查找第一模型和第二模型的碰撞面片;
具体地,可以根据碰撞面片的名字查找到第一模型和第二模型的碰撞面片。例如,步骤 201中为碰撞面片命名的名字为"CollisionArea",运行游戏时,搜索符合该名字的碰撞面片, 则会搜索到第一模型的碰撞面片和第二模型的碰撞面片。
通常的3D引擎都有根据名字进行搜索的功能,因此搜索碰撞面片的具体过程,此处就 不再详细叙述。
步骤203:分别获取第一模型的碰撞面片中的3D空间三角形信息和第二模型的碰撞面片 中的3D空间三角形信息;
所述3D空间三角形信息包含了 3D空间中的三维坐标信息。本实施例是以获取3D空间 三角形信息为例进行说明的,在实际应用中,也可以获取其它形状的3D空间信息,如3D空 间正方形信息、3D空间长方形信息、3D空间平行四边形信息等。由于3D空间多边形均可 以看作是由一个或多个3D空间三角形组成的,如3D空间正方形可以看作是由两个3D空间 三角形组成的,而在2D平面图形中,判断两个三角形是否相交的算法是最简单的,因此, 为了计算方便,提高计算效率,节省计算时间,优选地,采用本实施例中获取3D空间三角 形信息的方式。在实际应用中,如果获取的是3D空间非三角形信息,则先将其转换为3D空 间三角形信息,然后再执行后续的步骤。
步骤204:将获取的3D空间三角形信息转换为2D平面上的三角形,分别得到第一模型 的三角形和第二模型的三角形;
所述2D平面上的三角形仅包含二维坐标信息,即横坐标x和纵坐标y的信息。将3D空 间三角形信息转换为2D平面上的三角形,是指将3D空间的三角形的每个顶点的坐标转换为 2D平面上的坐标。
步骤205:检测第一模型的三角形与第二模型的三角形是否相交,如果是,则执行步骤 206;否则,执行步骤207;
其中,第一模型的三角形可以为一个或多个,第二模型的三角形也可以为一个或多个,
检测过程具体如下1) 第一模型包含一个三角形A,第二模型包含一个三角形B,则检测三角形A和B是 否相交,如果相交,则第一模型和第二模型发生碰撞,否则,未发生碰撞;
2) 第一模型包含一个三角形A,第二模型包含多个三角形Bl Bn,其中,n为大于1 的自然数,则检测三角形A是否和三角形Bl Bn中的任一个相交,只要三角形A和Bl Bn其中的一个相交,则第一模型和第二模型就发生碰撞,当然,和其中的多个相交也必然发 生碰撞,只有三角形A和三角形Bl Bn中的哪个也不相交时,表明第一模型和第二模型未 相撞;
3) 第一模型包含多个三角形Al An,第二模型包含一个三角形B,其中,n为大于1 的自然数,则检测三角形B是否和三角形Al An中的任一个相交,如果是,则第一模型和 第二模型发生碰撞,否则,未发生碰撞,与2)中描述的过程类似,区别仅在于是第一模型 包含多个三角形还是第二模型包含多个三角形;
4) 第一模型和第二模型均包含多个三角形,检测第一模型的多个三角形中的任一个三角 形是否与第二模型的多个三角形中的至少一个三角形相交,如果是,则第一模型与第二模型 发生碰撞,否则,未发生碰撞。也可以检测第二模型的多个三角形中的任一个三角形是否与 第一模型的多个三角形中的至少一个三角形相交,如果是,则第一模型与第二模型发生碰撞, 否则,未发生碰撞。
例如,参见图4,玩家飞机的第一模型包含2D平面上的Al和A2两个三角形,敌方飞 机的第二模型包含2D平面上的B1、 B2和B3共三个三角形。当检测到以下情况中的至少一 种时,可以判断出第一模型和第二模型发生碰撞Al禾t]Bl相交,Al禾nB2相交,A1和B3 相交,A2和B1相交,A2和B2相交,A2和B3相交;如果上述情况均未出现,则第一模型 和第二模型未发生碰撞。具体地,检测两个2D空间内的三角形是否相交,现有技术中有很 多种方法,此处就不再赘述。
另外,本发明实施例中,如果获取的是3D空间非三角形信息时,也可以不先将其转换 为3D空间三角形信息,而是直接将其转换为2D空间的图形,该转换后的2D空间图形可能 是三角形,也可能不是三角形。如果该2D空间图形是三角形,则判断第一模型的三角形与 第二模型的三角形是否相交,从而进行碰撞检测。如果该2D空间图形仍不是三角形,如为 长方形、菱形、梯形、六边形等,则有两种方式进行判断1)可以直接对该2D空间的图形 进行判断,根据该形状采用相应的算法判断两个模型的2D空间图形是否相交,如判断长方 形和菱形是否相交,从而进行碰撞检测;2)还可以先将该2D空间图形转换为一个或多个三 角形,如将六边形转换为4个三角形,然后再判断转换后第一模型的三角形与第二模型的三角形是否相交,从而进行碰撞检测。由于判断三角形是否相交的算法比较简单,优选地,采
用上述第二种方式进行判断。
步骤206:判断出第一模型与第二模型发生碰撞,流程结束。
步骤207:判断出第一模型与第二模型不发生碰撞,流程结束。
进一步地,在判断出第一模型与第二模型发生碰撞之后,上述方法还包括
对于第一模型和第二模型中的任一个模型,如果该模型所属的物体还包括其它模型,则
不显示该模型,将其替换为预先准备好的该模型被炸毁或撞毁的动画或Flash,形成碰撞部分
的动画显示,给用户呈现该模型被炸毁或撞毁的效果,而此时除该模型以外的其它模型则正
常显示,并且在该动画或Flash播放完成后,该其它模型仍然正常显示,给用户呈现的是该 物体的某个部件被炸毁或撞毁之后剩余其它部件的效果。例如,当大型飞机由机身模型和机 翼模型组成时,如果检测出机翼模型与敌机发生碰撞,则爆炸掉的仅仅是机翼模型,而机身 模型没有发生碰撞,仍然保留,因此,该碰撞发生后会显示机翼模型被炸毁的动画,以及没 有被炸毁的机身部分,而机翼部分则不显示,即飞机没有被炸毁,只是机体残缺了。
参见图5,本发明实施例还提供了一种碰撞检测的装置,包括 创建模块501,为游戏中待检测的第一模型和第二模型分别生成碰撞面片; 获取模块502,用于获取第一模型的碰撞面片中的3D空间信息和第二模型的碰撞面片中 的3D空间信息;
转换模块503,将获取模块502获取的3D空间信息转换为2D平面上的三角形,分别得 到第一模型的第一图形和第二模型的第二图形;
检测模块504,用于检测转换模块503得到的第一图形与第二图形是否相交,如果是, 则第一模型与第二模型发生碰撞,否则,第一模型与第二模型不发生碰撞。
参见图6,其中,创建模块501可以具体包括
创建单元501a,用于按照预设的规则,为游戏中待检测的第一模型和第二模型分别生成 碰撞面片,预设的规则为碰撞面片的重心与待检测模型的重心的距离不得超过预设的值。
优选地,可以将该预设的规则具体设置为碰撞面片与待检测模型的面积最大的截面在同一
个平面。
进一步地,创建模块501还可以包括
命名单元501b,用于将第一模型的碰撞面片和第二模型的碰撞面片命名为相同的名字; 相应地,获取模块502具体包括
査找单元502a,用于根据上述名字查找第一模型和第二模型的碰撞面片;获取单元502b,用于在査找单元502a找到第一模型和第二模型的碰撞面片后,获取第 一模型的碰撞面片中的3D空间信息和第二模型的碰撞面片中的3D空间信息。 本实施例中,检测模块504具体包括
检测单元,用于当第一模型的第一图形和第二模型的第二图形均为多个三角形时,检测 第一模型的多个三角形中的任一个三角形是否与第二模型的多个三角形中的至少一个三角形 相交,如果是,则第一模型与第二模型发生碰撞,否则,第一模型与第二模型不发生碰撞。
本实施例中,进一步地,上述装置还可以包括
显示处理模块505,用于在检测模块504判断出第一模型与第二模型发生碰撞之后,对 于第一模型和第二模型中的任一个模型,如果该任一模型所属的物体还包括其它模型,则不 显示该任一模型,显示其它模型。
本实施例中,转换模块503具体包括
三角形转换单元503a,用于当获取模块502获取的3D空间信息为3D空间三角形信息时, 将该3D空间三角形信息转换为2D平面上的三角形,分别得到第一模型的三角形和第二模型 的三角形;
非三角形转换单元503b,当获取模块502获取的3D空间信息为3D空间非三角形信息 时,先将该3D空间非三角形信息转换为3D空间三角形信息,再将该3D空间三角形信息转 换为2D平面上的三角形,分别得到第一模型的三角形和第二模型的三角形。
本发明实施例提供的上述方法和装置,可以应用于游戏中多个物体或多个模型之间的碰 撞检测,尤其适合于具有一定观察视角的应用场景,这种情况下对碰撞检测的精度要求都不 会太高,该方法和装置均能够满足精度要求。例如,可以应用于图1所示的具有俯视观察视 角的游戏的碰撞检测。本发明实施例中的碰撞检测不是在3D空间中进行,而是在2D空间中 进行的,当玩家看到游戏界面中玩家飞机和敌方飞机有相交点时,则上述技术方案就会判定 该两飞机相撞,而不论该飞机在3D空间中是否相撞。即使玩家飞机和敌方飞机在高度上可 能有比较大的差距,完全没有碰撞,但是在游戏屏幕上看到的结果还是这两个飞机相撞了。
本发明实施例提供的上述方法和装置,通过将3D模型的碰撞检测转化为2D平面内的图 形的检测,极大地减少了碰撞检测的计算量,縮短了碰撞检测的时间,提高了碰撞检测的效 率。而且,由于碰撞面片是在3D模型中创建的,很容易进行修改,可以通过修改碰撞面片 来实现不同区域的碰撞检测,操作简单、方便。另外,对碰撞面片和模型的相似度的要求不 是很高,可以使用具有一定差异的碰撞面片来进行碰撞检测。当游戏中的物体包括多个模型 时,如果其中一个模型发生碰撞,则其它模型还仍然显示,并显示该发生碰撞的模型被撞毁戏的真实性,提升了游戏玩家的体验。
本发明实施例提供的上述技术方案的全部或部分可以通过程序指令相关的硬件来完成, 所述程序可以存储在可读取的存储介质中,该存储介质包括ROM、 RAM、磁碟或者光盘等 各种可以存储程序代码的介质。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之 内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1、一种碰撞检测的方法,其特征在于,所述方法包括为游戏中待检测的第一模型和第二模型分别生成碰撞面片;获取所述第一模型的碰撞面片中的3D空间信息和所述第二模型的碰撞面片中的3D空间信息;将获取的3D空间信息转换为2D平面上的图形,分别得到所述第一模型的第一图形和所述第二模型的第二图形;检测所述第一图形与第二图形是否相交,如果是,则所述第一模型与第二模型发生碰撞,否则,所述第一模型与第二模型不发生碰撞。
2、 根据权利要求1所述的碰撞检测的方法,其特征在于,所述为游戏中待检测的第一模 型和第二模型分别生成碰撞面片,具体包括按照预设的规则,为游戏中待检测的第一模型和第二模型分别生成碰撞面片,所述预设的规则为碰撞面片的重心与待检测模型的重心的距离不得超过预设的值。
3、 根据权利要求2所述的碰撞检测的方法,其特征在于,所述预设的规则具体为碰撞 面片与待检测模型的面积最大的截面在同一个平面。
4、 根据权利要求1所述的碰撞检测的方法,其特征在于,所述为游戏中待检测的第一模 型和第二模型分别生成碰撞面片之后,还包括将所述第一模型的碰撞面片和所述第二模型的碰撞面片命名为相同的名字; 获取所述第一模型的碰撞面片中的3D空间信息和所述第二模型的碰撞面片中的3D空间信息,具体包括根据所述名字查找所述第一模型和第二模型的碰撞面片,获取所述第一模型的碰撞面片中的3D空间信息和所述第二模型的碰撞面片中的3D空间信息。
5、 根据权利要求1所述的碰撞检测的方法,其特征在于,所述第一模型与第二模型发生碰撞之后,还包括对于所述第一模型和第二模型中的任一个模型,如果该模型所属的物体还包括其它模型,则不显示该模型,显示所述其它模型。
6、 根据权利要求1至5中任一权利要求所述的碰撞检测的方法,其特征在于,将获取的 3D空间信息转换为2D平面上的图形,具体包括当所述3D空间信息为3D空间三角形信息时,将获取的3D空间三角形信息转换为2D 平面上的三角形;当所述3D空间信息为3D空间非三角形信息时,先将所述3D空间非三角形信息转换为 3D空间三角形信息,再将获取该3D空间三角形信息转换为2D平面上的三角形。
7、 一种碰撞检测的装置,其特征在于,所述装置包括创建模块,为游戏中待检测的第一模型和第二模型分别生成碰撞面片;获取模块,用于获取所述第一模型的碰撞面片中的3D空间信息和所述第二模型的碰撞 面片中的3D空间信息;转换模块,用于将所述获取模块获取的3D空间信息转换为2D平面上的图形,分别得到 所述第一模型的第一图形和所述第二模型的第二图形;检测模块,用于检测所述第一图形与所述第二图形是否相交,如果是,则所述第一模型 与第二模型发生碰撞,否则,所述第一模型与第二模型不发生碰撞。
8、 根据权利要求7所述的碰撞检测的装置,其特征在于,所述创建模块具体包括 创建单元,用于按照预设的规则,为游戏中待检测的第一模型和第二模型分别生成碰撞面片,所述预设的规则为碰撞面片的重心与待检测模型的重心的距离不得超过预设的值。
9、 根据权利要求8所述的碰撞检测的装置,其特征在于,所述预设的规则具体为碰撞面片与待检测模型的面积最大的截面在同一个平面。
10、 根据权利要求7所述的碰撞检测的装置,其特征在于,所述创建模块还包括命名单元,用于将所述第一模型的碰撞面片和所述第二模型的碰撞面片命名为相同的名字;所述获取模块具体包括查找单元,用于根据所述名字査找所述第一模型和第二模型的碰撞面片;获取单元,用于在所述査找单元找到所述第一模型和第二模型的碰撞面片后,获取所述 第一模型的碰撞面片中的3D空间信息和所述第二模型的碰撞面片中的3D空间信息。
11、 根据权利要求7所述的碰撞检测的装置,其特征在于,所述装置还包括 显示处理模块,用于在所述检测模块判断出所述第一模型与第二模型发生碰撞之后,对于所述第一模型和第二模型中的任一个模型,如果该任一模型所属的物体还包括其它模型, 则不显示该任一模型,显示所述其它模型。
12、 根据权利要求7至11所述的碰撞检测的装置,其特征在于,所述转换模块具体包括: 三角形转换单元,用于当所述获取模块获取的3D空间信息为3D空间三角形信息时,将该3D空间三角形信息转换为2D平面上的三角形,分别得到所述第一模型的三角形和所述第 二模型的三角形;非三角形转换单元,当所述获取模块获取的3D空间信息为3D空间非三角形信息时,先 将所述3D空间非三角形信息转换为3D空间三角形信息,再将该3D空间三角形信息转换为 2D平面上的三角形,分别得到所述第一模型的三角形和所述第二模型的三角形。
全文摘要
本发明公开了一种碰撞检测的方法和装置,属于网络游戏领域。所述方法包括为游戏中待检测的第一模型和第二模型分别生成碰撞面片;获取第一模型、第二模型的碰撞面片中的3D空间信息;并转换为2D平面上的图形,得到第一模型的第一图形和第二模型的第二图形;检测第一图形与第二图形是否相交,如果是,则第一模型与第二模型发生碰撞,否则,不发生碰撞。所述装置包括创建模块、获取模块、转换模块和检测模块。本发明通过将3D模型的碰撞检测转化为2D平面内图形的检测,极大地减少了碰撞检测的计算量,缩短了碰撞检测的时间,提高了碰撞检测的效率。
文档编号G06T17/00GK101615305SQ20091016150
公开日2009年12月30日 申请日期2009年7月24日 优先权日2009年7月24日
发明者姚建辉, 闻 汤, 王彭城 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1