一种实时碰撞检测系统的实现方法技术方案

技术编号:7457616 阅读:198 留言:0更新日期:2012-06-23 20:40
本发明专利技术提供了一种实时碰撞检测系统的实现方法,包括如下步骤:A、将场景分割成四叉树,制作场景中需要发生碰撞的物体的带逻辑等级的碰撞模型,生成碰撞模型的模型数据文件以及场景的四叉树及结点信息文件;B、读取所述四叉树及结点信息文件,创建管理模型的四叉树;读取模型数据文件,根据碰撞模型的数量读取碰撞模型中的三角形数据,创建保存三角形数据的数组,并生成碰撞模型的沿轴排列包围盒AABB,根据最长坐标轴对碰撞模型进行排序,然后建立AABB树;C、在客户端和服务器侧检测在射线检测距离内的射线与四叉树的碰撞,以及射线与四叉树叶结点、AABB树及三角形的碰撞,其中在客户端测试最近的碰撞点,在服务器侧判断是否碰撞。

【技术实现步骤摘要】

本专利技术涉及计算机游戏及虚拟现实
,尤其涉及。
技术介绍
碰撞检测技术用于判定一对或多对物体在给定时间域内的同一时刻是否占有相同区域。它是机器人运动规划、计算机仿真、虚拟现实、游戏等领域不可回避的问题之一。在当今的大型3D场景游戏中,实时碰撞检测技术非常常见,它能够使游戏中各种效果的表现更加精准,玩家的体验更加真实,但是复杂场景的实时检测的效率有时还不能令人满意,影响到游戏的整体性能,影响游戏体验。而对于一些射击类的大型网络游戏,如果仅仅进行客户端的检测,服务端的碰撞结果就只能由客户端返回,但是这样就给了外挂可乘之机,虽然可能可以通过其他方式避免,但也会相对复杂。如果在服务端也进行碰撞检测,以现有的碰撞检测技术而言,服务端无法承受大数据量的碰撞检测,或者需要性能更高效的服务器,增加游戏的运营的支出。基于格子的碰撞系统在早期比较常见,它实现简单,执行效率快,像早期的仙剑奇侠传和其他碰撞怪的角色扮演游戏(RPG),以及一些推箱子、打砖块、俄罗斯方块等游戏,都是基于这种类型的碰撞检测。基于格子的碰撞检测系统碰撞的精度不够,不属于严格意义上的碰撞检测。基于二叉空间分割(BSP)树的碰撞检测比较适合复杂的封闭场景,场景根据一定的分配策略将空间划分为2部分,然后再对子结点进行递归划分,直到达到分配策略的要求。碰撞模型的图元数据都保存在叶子中。这种碰撞的分割策略很重要,技术已经很成熟, 效率很高。但是基于BSP树的碰撞检测,BSP树的生成需要很长的预处理时间,不适合加载时计算;BSP划分经常会产生原多边形数三到四倍的多边形,考虑到不用保存法线、颜色、 UV等信息也要增加将近一倍的资源容量,因此不适合处理大型场景的碰撞。在一个大的游戏中将模型资源的容量从200M增加到400M相信是大部分人都不愿接受的。
技术实现思路
本专利技术提供了,能够实时高效的处理大型场景的碰撞。本专利技术实施例提供的包括如下步骤A、将场景分割成四叉树,制作场景中需要发生碰撞的物体的碰撞模型,生成碰撞模型的模型数据文件以及场景的四叉树及结点信息文件;B、读取所述四叉树及结点信息文件,创建管理模型的四叉树;读取模型数据文件, 根据碰撞模型的数量读取碰撞模型中的三角形数据,创建保存三角形数据的数组,并生成碰撞模型的沿轴排列包围盒AABB,根据最长坐标轴对碰撞模型进行排序,然后建立AABB 树;C、在客户端和服务器侧检测在射线检测距离内的射线与四叉树的碰撞,以及射线与四叉树叶结点、AABB树及三角形的碰撞,其中在客户端测试最近的碰撞点,在服务器侧判断是否碰撞。较佳地,步骤A所述将场景分割成四叉树包括Al、判断场景中是否存在根节点,若是,执行步骤A2,否则结束本流程;A2、判断场景中模型的AABB与当前节点的xz平面是否发生碰撞,若是执行步骤 A3,否则结束本流程;A3、判断当前节点是否为叶子节点且当前节点包含的模型数目小于N,若是执行步骤A5,否则执行步骤A4;A4、判断当前节点是否为最深节点,若是,执行步骤A5,否则执行步骤A6 ;A5、在当前节点中添加模型数据的索引,然后结束本流程;A6、判断是否遍历完四叉树的四个子节点,若是,执行步骤A7,否则执行步骤AlO ;A7、判断是否遍历完当前节点包含的模型数据,若是执行步骤A8,否则返回步骤 A6 ;A8、判断是否到达最上层结点,若是,结束本流程,否则执行步骤A9;A9、返回上一层结点,并继续执行步骤A6 ;A10、设置当前结点的子结点为当前结点,并继续执行步骤A2。较佳地,所述碰撞模型为场景中物体的渲染模型的简化模型。较佳地,步骤A所述绘制场景中需要发生碰撞的物体的碰撞模型包括设置碰撞模型的逻辑等级;所述检测射线与四叉树叶结点、AABB树及三角形的碰撞符合如下原则射线仅与高于自身逻辑等级的碰撞模型对应的AABB发生碰撞。较佳地,所述碰撞模型的逻辑等级分成低,中,高共三级。较佳地,所述四叉树及结点信息文件的文件头部分包括文件标识、碰撞模型数量和四叉树结点数量;文件体中包括N组结点信息以及结点包含模型信息,N为四叉树中的结点总数;四叉树及结点信息文件还包括结点关系信息。较佳地,所述四叉树及结点信息文件中的第i组结点信息的具体内容包括第i个结点的X轴最小值、Z轴最小值、X轴最大值、Z轴最大值、该节点的深度以及结点标识,i为自然数,且1彡i彡N。较佳地,所述四叉树及结点信息文件中的第i组结点包含模型信息包括结点包含碰撞模型数量以及该结点包含的全部碰撞模型索引。较佳地,所述四叉树及结点信息文件中的结点关系信息包括结点索引、孩子标志、 孩子结点索引以及1至4个孩子结点。较佳地,所述模型数据文件的文件头包括文件标识和三角形网格数量,文件体包括三角形信息和模型数据信息;所述三角形信息中包括多于1个三角形网格信息,每个三角形网格信息中包括该三角形网格中包含的三角形数量、三角形信息;模型数据信息中包括每一个碰撞模型的模型AABB、碰撞逻辑等级、三角形网格索引、三角形数量以及转换矩阵。较佳地,步骤C所述在客户端测试最近的碰撞点包括客户端测试所有与射线发生碰撞的模型的三角形数据,计算最近的碰撞点,并返回碰撞测试结果。较佳地,步骤C所述在服务器侧判断是否碰撞包括当服务器检测到射线与某一个三角形发生碰撞时,立即返回测试成功。较佳地,步骤C所述检测在射线检测距离内的射线与四叉树的碰撞检测包括如下流程Cl、判断根结点是否是叶子结点,若是,执行步骤C2,否则执行步骤C3 ;C2、检测叶子结点中模型碰撞,然后结束本流程;C3、判断射线是否与根结点AABB碰撞,若是执行步骤C4,否则结束本流程;C4、判断该根结点是否存在未检验的子结点,若是执行步骤C7,否则执行步骤C5 ;C5、判断该根结点是否有父结点,若是执行步骤C6,否则结束本流程;C6、返回父节点,并转至步骤C4 ;C7、判断子结点是否是叶子结点,若是执行步骤C8,否则执行步骤ClO ;C8、判断该叶子结点是否存在模型数据,若是执行步骤C9,否则执行步骤C6 ;C9、测试射线与叶子结点中模型的碰撞,然后返回步骤C5 ;C10、测试射线与子结点的碰撞;Cll 若碰撞成功,执行步骤C12,若碰撞失败,返回步骤C4 ;C12:判断该子节点是否是叶子结点,若是,返回步骤C4,否则以这个子节点为当前结点,然后返回步骤C4。较佳地,步骤C所述检测在射线检测距离内的射线与四叉树叶结点和AABB及三角形的碰撞包括如下流程C13、判断当前场景是否存在碰撞模型,若是,执行步骤C14,否则结束本流程;C14、判断射线测试等级是否大于模型的逻辑碰撞等级,若是,执行步骤C15,否则返回步骤C13 ;C15、判断射线与模型AABB碰撞是否成功,若是,执行步骤C16,否则返回步骤 C13 ;C16、转换射线和起始点到模型本地坐标系;C17、设置根结点;C18、测试射线与当前结点模型的AABB的碰撞;C19、若碰撞成功,执行步骤C20,否则转至步骤C23 ;C20、判断当前结点是否是叶子结点,若是执行步骤C24,否则执行步骤C21 ;C21、判断子节点是否遍历完毕,若是,执行步骤C23,否则执行步骤C22 ;C22、访问子节点,并返回步骤C18 ;C23、判断是否存在父节点,若是返回步骤C21,否则结束本文档来自技高网
...

【技术保护点】

【技术特征摘要】

【专利技术属性】
技术研发人员:张明阳龚静
申请(专利权)人:北京像素软件科技股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1
相关领域技术