一种基于八叉树的OBB包围盒碰撞检测方法.docx

上传人:b****5 文档编号:29354399 上传时间:2023-07-22 格式:DOCX 页数:11 大小:22.24KB
下载 相关 举报
一种基于八叉树的OBB包围盒碰撞检测方法.docx_第1页
第1页 / 共11页
一种基于八叉树的OBB包围盒碰撞检测方法.docx_第2页
第2页 / 共11页
一种基于八叉树的OBB包围盒碰撞检测方法.docx_第3页
第3页 / 共11页
一种基于八叉树的OBB包围盒碰撞检测方法.docx_第4页
第4页 / 共11页
一种基于八叉树的OBB包围盒碰撞检测方法.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

一种基于八叉树的OBB包围盒碰撞检测方法.docx

《一种基于八叉树的OBB包围盒碰撞检测方法.docx》由会员分享,可在线阅读,更多相关《一种基于八叉树的OBB包围盒碰撞检测方法.docx(11页珍藏版)》请在冰豆网上搜索。

一种基于八叉树的OBB包围盒碰撞检测方法.docx

一种基于八叉树的OBB包围盒碰撞检测方法

一种基于八叉树的OBB包围盒碰撞检测方法

周俊玮;万宇;万旺根;林继承;陶道

【摘要】碰撞检测技术是大规模复杂场景渲染的关键技术之一,它可以有效地提高虚拟环境的真实感和沉浸感.碰撞检测的研究目标是如何在很高的实时交互要求下完成大量复杂物体的相交检测.提出一种将场景图中的OBB包围盒以八叉树的形式划分,并利用八叉树的层次结构实现有效碰撞检测的方法,该方法从宏观到微观的搜索方式可以快速确定需要进行相交检测的对象列表,有效地避免所有几何节点与运动节点的相交检测,提高了碰撞检测的效率,并且采用OBB包围盒来描述几何模型,有效地提高碰撞检测的精度.

【期刊名称】《计算机应用与软件》

【年(卷),期】2009(026)004

【总页数】3页(P75-77)

【关键词】八叉树;碰撞检测;有向包围盒

【作者】周俊玮;万宇;万旺根;林继承;陶道

【作者单位】上海大学通信与信息工程学院,上海,200072;香港科技大学,香港;上海大学通信与信息工程学院,上海,200072;上海大学通信与信息工程学院,上海,200072;上海大学通信与信息工程学院,上海,200072

【正文语种】中文

【中图分类】工业技术

第26卷第4期2009年4月计算机应用与软件ComputerApplicationsandSoftwareVol.26No.4Apr.2009一种基于八叉树的OBB包围盒碰撞检测方法周俊玮1万宇2万旺根1林继承1陶道11(上海大学通信与信息工程学院上海200072)2(香港科技大学香港)摘要碰撞检测技术是大规模复杂场景渲染的关键技术之一,它可以有效地提高虚拟环境的真实感和沉浸感。

碰撞检测的研究目标是如何在很高的实时交互要求下完成大量复杂物体的相交检测。

提出一种将场景图中的OBB包围盒以八叉树的形式划分,并利用八叉树的层次结构实现有效碰撞检测的方法,该方法从宏观到微观的搜索方式可以快速确定需要进行相交检测的对象列表,有效地避免所有几何节点与运动节点的相交检测,提高了碰撞检测的效率,并且采用OBB包围盒来描述几何模型,有效地提高碰撞检测的精度。

关键词八叉树碰撞检测有向包围盒AMETHODOFCOLLISIONDETECTIONWITHOBBBASEDONOCTREEZhouJunwejlWanYu2'WanWanggen'LinJichenglTaoDaol/(SchoolofCommunicationarrdInformationEn.gineerin.g,ShanghaiUniversity,.Shartghai200072,China)2(HongKongUnitersityoJSciertceandTechn.ology,Hongkong.China)AbstractCoLlisiondetectionisoneofthekeytechnologies,whichisusedinrenderingcomplicatedlarge-scalescene.'rtietruthandim-mersionofvirtualenvironmentcanbeimprovedgreatlyinthisway.Thestudypurposeofcollisiondetectionishowtofinishinteractivedetec-tionwithalotofcomplexobjectsinveryhighrealtimeinteractiveneed.Inthispaper,wedividedOBBs(OrientedBoumiingBox)inthescenegraphbyOctree,thenimplementcollisiondetectioneffectivelybythehierachicalstructureofOctree.Thelistofobjectswhichneedtobeinteractivedetectedcanbedeterminedquicklybythissearchmethodfrommacrostructuretomicrostructure.Bymeansofthisalgorithm,wecanavoiddetectionbetweenallOBBsandactivenodeandimprovetheefficiencyofcollisiondetection.UsingOBBstodescribegeometrymodel,wecanimprovetheaccuracvofthecollisiondetectionavailably.KeywordsOctreeCollisiondetectionOBB(OnentedBoundingBox)O引言碰撞检测问题在计算机图形学领域中有很长的研究历史,近年来,随着虚拟现实中的场景模型越来越多样化,场景规模也不断扩大,如何有效地提高碰撞检测的效率再一次成为研究的热点ji1。

碰撞检测系统的输入模型是构成几何对象的基本几何元素(通常是三角形)的集合,其任务是确定在某一时刻两个模型是否发生干涉,即它们的交集是否不为空。

目前的几何模型多为四面体网格模型,最原始最简单的碰撞检测算法就是对两个输入模型中的所有基本几何元素进行两两相交测试,当模型的复杂度增高时,这种0(凡2)次的相交测试显然是无法容忍的。

因此减少基本几何元素两两相交测试的数目,提高算法速度,以保证虚拟环境的实时交互性是碰撞检测问题的核心。

本文采用八叉树结构将场景中的各节点按空间位置进行有效的组织归类,通过树结构的遍历方式对场景中的各节点实施碰撞检测,从而达到减少检测次数的目的。

而在检测过程中采用OBB作为几何节点的包围盒能够更精准地反映轮廓,增加碰撞检测的精度L2.3]相关工作:

八叉树的划分Ho本方法的设计是建立在八叉树生成算法的基础上的,生成算法已经对场景进行了空间八叉树的划分,并做了很好的封装,可以很好地处理XML格式的模型文件。

场景通过引擎处理后,生成如下的八叉树数据结构:

ClassOctreeNode{intindex:

intdepth;Aabb3box;OctTreeNode毒father;OctTreeNode}children[8];Meshmesh[n];//成员函数}收稿日期:

2007-10-29。

信息产业部电子信息产业发展基金(2005688);上海市重点学科建设项目(T0102)。

周俊玮,硕士生,主研领域:

虚拟现实技术。

第26卷第4期2009年4月计算机应用与软件ApplicationsandSoftwareVol.26No.4Apr.20091万宇万旺根陶道摘要碰撞检测技术是大规模复杂场景渲染的关键技术之一,它可以有效地提高虚拟环境的真实感和沉浸感。

碰撞检测的研究目标是如何在很高的实时交互要求下完成大量复杂物体的相交检测。

提出一种将场景图中的OBB包围盒以八叉树的形式划分,并利用八叉树的层次结构实现有效碰撞检测的方法,该方法从宏观到微观的搜索方式可以快速确定需要进行相交检测的对象列表,有效地避免所有几何节点与运动节点的相交检测,提高了碰撞检测的效率,并且采用OBB包围盒来描述几何模型,有效地提高碰撞检测的精度。

AMETHODOFOBBBASEDONZhouJunwejlWanYu2'Wanggen'LinJichenglTaoDaol/(SchoolofCommunicationarrdInformationEn.gineerin.g,ShanghaiUniversity,.Shartghai200072,2(HongKongUnitersityoJSciertceandTechn.ology,Hongkong.China)CoLlisiondetectionisoneofthekeytechnologies,whichisusedinrenderingcomplicatedlarge-scalescene.'rtietruthandim-mersionofvirtualenvironmentcanbeimprovedgreatlyinthisway.Thestudypurposeofcollisiondetectionishowtofinishinteractivedetec-tionwithalotofcomplexobjectsinveryhighrealtimeinteractiveneed.Inthispaper,wedividedOBBs(OrientedBoumiingBox)inthegraphbyOctree,thenimplementcollisiondetectioneffectivelybythehierachicalstructureofOctree.Thelistofobjectswhichneedtobeinteractivedetectedcanbedeterminedquicklybythissearchmethodfrommacrostructuretomicrostructure.Bymeansofthisalgorithm,weavoiddetectionbetweenallOBBsandactivenodeandimprovetheefficiencyofcollisiondetection.UsingOBBstodescribegeometrymodel,wecanimprovetheaccuracvofthecollisiondetectionavailably.OctreeCollisiondetectionOnentedBoundingBox)O引言碰撞检测问题在计算机图形学领域中有很长的研究历史,近年来,随着虚拟现实中的场景模型越来越多样化,场景规模也不断扩大,如何有效地提高碰撞检测的效率再一次成为研究的热点ji1何元素(通常是三角形)的集合,其任务是确定在某一时刻两个模型是否发生干涉,即它们的交集是否不为空。

目前的几何模型多为四面体网格模型,最原始最简单的碰撞检测算法就是对两个输入模型中的所有基本几何元素进行两两相交测试,当模型的复杂度增高时,这种0(凡因此减少基本几何元素两两相交测试的数目,提高算法速度,以保证虚拟环境的实时交互性是碰撞检测问题的核心。

本文采用八叉树结构将场景中的各节点按空间位置进行有效的组织归类,通过树结构的遍历方式对场景中的各节点实施碰撞检测,从而达到减少检测次数的目的。

而在检测过程中采用OBB作为几何节点的包围盒能够更精准地反映轮廓,增加碰撞检测的精度L2.3]Ho本方法的设计是建立在八叉树生成算法的基础上的,生成算法已经对场景进行了空间八叉树的划分,并做了很好的封装,可以很好地处理XML格式的模型文件。

场景通过引擎处理后,生成如下的八叉树数据结构:

ClassOctreeNode{intindex:

depth;Aabb3box;OctTreeNode毒father;/成员函数}收稿日期:

2007-10-29。

信息产业部电子信息产业发展基金76计算机应用与软件2009年其中mdex是树节点的序号(采用深度遍历排序);depth描述的是八叉树节点的深度信息。

box主要描述该空间八叉树节点的包围盒信息;father记录的是该节点的父节点;children记录以本节点为父节点的8个子节点,叶子节点无子节点;mesh是叶子节点特有的成员变量,记录该叶子节点所包围立体空间中的所有模型节点。

2碰撞检测悼1本文提到的碰撞检测方法,主要是先通过八叉树的空间节点与运动节点进行相交检测,确定需要做进一步检测的八叉树叶子节点,取出叶子节点中包含的所有几何节点,利用几何节点的OBB包围盒与运动节点做进一步检测,从而确定所有的碰撞节点。

2.1包围盒的定义与构建在整个碰撞检测过程中我们一共定义了两种形式的包围盒:

AABB和OBB。

AABB(AxisAlignedBoundingBox)是一个正立方体结构,它的三条轴向量分别平行于世界坐标的坐标轴,所以仅用两个点的坐标就能完整地描述一个AABB包围盒,本文中AABB用来描述八叉树的一个空间节点的包围盒特性,其数据结构如下:

AABBjTVeccor3max;'l'Vector3min;}max代表了包围盒前右上顶点的世界坐标,min代表了包围盒后左下顶点的世界坐标。

AABB包围盒的构建很简单,只要遍历所有的顶点,分别取出最大和最小的x值.y值,z值(共六个值),max点就由最大的j个值组成,min点由最小的三个值组成。

有向包围盒OBB(OnentedBoundingBox)本质上是一个最贴近物体的长方体,只不过该长方体可以根据物体的一阶矩任意旋转。

OBB是用来描述几何节点的包围盒信息,两个OBB包围盒之间的相交检测是整个碰撞检测系统的最后一个环节,它将具体确认相应的两个几何节点是否相交,在本方法中OBB包围盒是通过三个向量和这三个方向上分别的长度来定义的数据结构如下:

OBB{TVector3mCenter;TVector3mAxes[3];inlmF■‘Ill[3];}m(emcr^'.A..mAxesmAxes2个向量,mExtent代表了三个向量上的长度(正负方向都有)。

的包围盒构建相对于AABB要复杂很多。

OBB的计算关键是寻找最佳方向,并确定在该方向上包围对象的包围盒的最小尺寸。

为此,计算OBB的方法主要是利用顶点坐标的一阶和二阶统计特性,首先计算顶点分布的均值弘,将它作为包围盒的中心,然后计算协方差矩阵C。

算式如下:

p=击;(q.+p.+rI)

(1)公式

(1)累计所有的定点的坐标向量,计算平均向量肛,其中n是所有三角面的数量,p.q,r分别是三角面的三个顶点。

Cjk=点耋(Pi;jP,k+qi虿,。

+rliri\)1≤j,k≤3

(2)公式

(2)利用平均向量计算协方差矩阵G。

其中声.=P.一肛,q.=审,-肛和芦。

=r.一p都是三维向量。

然后求出协方差矩阵C的特征向量,确定OBB包围盒局部坐标的三个轴向。

由于协方差矩阵C是对称矩阵,其三个特征向量相互正交。

将这三个特征向量单位化后,设定它们为对象OBB包围盒的局部坐标的三个轴向。

最后,将对象所有定点投影在三个轴向上,计算出在三个轴向上的最大值,以确定该OBB的大小。

2.2八叉树空间节点的碰撞检测八叉树是将3D数据集划分到不同的包围体层次的一种典型有效的数据结构。

由根节点开始每个节点下最多可以有8个子节点,每个子节点还可以拥有8个子节点,就这样一层一层地划分下去,直到满足划分条件为止,最后那些不包含子节点的节点我们称为叶子节点,这类节点记录了所包含空间的所有几何节点。

在做节点碰撞检测时,第一次由根节点开始层层向下寻找包含整个运动节点的最小八叉树节点(通过判断OBB包围盒的所有八个顶点是否包含于八叉树节点AABB包围盒内实现).找到后记录该节点,如没找到则记录根节点,该节点作为下·次判断时的起始节点。

然后遍历该节点下的所有子节点,如完全与运动节点不相交,则该节点下的所有叶子节点中所包含的全部几何节点都不与运动节点产生碰撞,如相交,则需要进行细化检测,检测所包含的几何节点与运动节点的相交情况。

以后的判断就从记录的节点开始,如果由于移动等原因导致该节点已不能包含整个运动节点时,则向}:

查询最小的一个包含该节点的八叉树空间节点,否则再次向下查询,确认新的起始节点,整个程序流程如图2所示。

j二卫生)豳≤参》一圈蕊q蜜》>i瞿亟]·一t}_!

‘c:

;{;lll蓼>“i匿蛰______LU童墨,j图2八叉树碰撞检测判断流程图10BB宅间结构图该过程中主要完成OBB与AABB的包围盒碰撞检测,具体如图1所示,mCenter代表OBB的中心坐标,mAxes代表三方法为先将OBB的三个方向轴上的线段在世界坐标的膏轴上述的是八叉树节点的深度信息。

box主要描述该空间八叉树节点的包围盒信息;father记录的是该节点的父节点;children记录以本节点为父节点的8个子节点,叶子节点无子节点;mesh是叶子节点特有的成员变量,记录该叶子节点所包围立体空间中的所有模型节点。

2悼1本文提到的碰撞检测方法,主要是先通过八叉树的空间节点与运动节点进行相交检测,确定需要做进一步检测的八叉树叶子节点,取出叶子节点中包含的所有几何节点,利用几何节点的OBB包围盒与运动节点做进一步检测,从而确定所有的碰撞节点。

2.1和OBBAABB(AxisAlignedBoundingBox)是一个正立方体结构,它的三条轴向量分别平行于世界坐标的坐标轴,所以仅用两个点的坐标就能完整地描述一个AABB包围盒,本文中AABB用来描述八叉树的一个空间节点的包围盒特性,其数据结构如下:

jTVeccor3max;'l'Vector3min;max代表了包围盒前右上顶点的世界坐标,min代表了包围盒后左下顶点的世界坐标。

AABB包围盒的构建很简单,只要遍历所有的顶点,分别取出最大和最小的x值.y值,z值(共六个值),max点就由最大的j个值组成,min点由最小的三个值组成。

有向包围盒OBB(OnentedBoundingBox)本质上是一个最贴近物体的长方体,只不过该长方体可以根据物体的一阶矩任意旋转。

OBB是用来描述几何节点的包围盒信息,两个OBB包围盒之间的相交检测是整个碰撞检测系统的最后一个环节,它将具体确认相应的两个几何节点是否相交,在本方法中OBB包围盒是通过三个向量和这三个方向上分别的长度来定义的数据结构如下:

TVector3mCenter;TVector3mAxes[3];inlmF■‘Ill[3];m(emcr^..mAxesmAxes2的包围盒构建相对于AABB要复杂很多。

OBB的计算关键是寻找最佳方向,并确定在该方向上包围对象的包围盒的最小尺寸。

为此,计算OBB的方法主要是利用顶点坐标的一阶和二阶统计特性,首先计算顶点分布的均值弘,将它作为包围盒的中心,然后计算协方差矩阵C。

算式如下:

p=击;(q.+p.+rI)

(1)公式

(1)累计所有的定点的坐标向量,计算平均向量肛,其中n是所有三角面的数量,p.q,r分别是三角面的三个顶点。

Cjk=点耋(Pi;jP,k+qi虿,。

+rliri\)肛,q=审-芦=r一p都是三维向量。

然后求出协方差的特征向量,确定OBB包围盒局部坐标的三个轴向。

由于协方差矩阵C是对称矩阵,其三个特征向量相互正交。

将这三个特征向量单位化后,设定它们为对象OBB包围盒的局部坐标的三个轴向。

最后,将对象所有定点投影在三个轴向上,计算出在三个轴向上的最大值,以确定该OBB的大小。

八叉树是将3D数据集划分到不同的包围体层次的一种典型有效的数据结构。

由根节点开始每个节点下最多可以有8个子节点,每个子节点还可以拥有8个子节点,就这样一层一层地划分下去,直到满足划分条件为止,最后那些不包含子节点的节点我们称为叶子节点,这类节点记录了所包含空间的所有几何节点。

在做节点碰撞检测时,第一次由根节点开始层层向下寻找包含整个运动节点的最小八叉树节点(通过判断OBB包围盒的所有八个顶点是否包含于八叉树节点AABB包围盒内实现).找到后记录该节点,如没找到则记录根节点,该节点作为下·判断时的起始节点。

然后遍历该节点下的所有子节点,如完全与运动节点不相交,则该节点下的所有叶子节点中所包含的全部几何节点都不与运动节点产生碰撞,如相交,则需要进行细化检测,检测所包含的几何节点与运动节点的相交情况。

以后的判断就从记录的节点开始,如果由于移动等原因导致该节点已不能包含整个运动节点时,则向}:

查询最小的一个包含该节点的八叉树空间节点,否则再次向下查询,确认新的起始节点,整个程序流程如图2所示。

二卫生)≤参》一圈蕊q蜜》>i一t}_!

‘c:

{lll蓼>“i______LU童墨,j图2图0BB宅间结构图该过程中主要完成OBB与AABB的包围盒碰撞检测,具体第4期周俊玮等:

一种基于八叉树的OBB包围盒碰撞检测方法77取投影,然后将这三个投影合并成一条线段(该线段为三条投影线段长度的和),然后利用该线段与AABB的X轴线段进行比较,检查有无相交,在Y轴和Z轴上完成同样的工作,如果其中任意一次相交检测的结果为否则判定两个包围盒不相交,反之则相交。

求投影线段的具体公式如下(公式(3)和公式(4)表示X轴投影,其他类似):

X。

叭=X,+IairilxI+Ia2rz2xI+lain3XI(3)X…=X,-J口lri,x'I—la2n2xI-【a3元3fI(4)其中X…和X。

.组成rx轴上的投影线段;Ⅱ,、“:

、a3分别代表三个方向向量上的长度;疗,、蔬:

、元,分别代表三个方向向量;x,代表中心坐标的X值。

2.3具有OBB包围盒的节点的相交检测两个OBB包围盒之间的相交检测是整个碰撞检测系统的最后一个步骤,它将与运动肖点相交的叶子节点所包含的所有几何节点一一取出,然后分别与运动节点进行相交检测,最后确认碰撞检测的具体结果。

两个OBB之间的相交检测和AABB与之间的相交检测基本原理相同,但是稍微复杂一点。

我们要将做检测的两个OBB分别在X轴,Y轴,Z轴上取投影,然后两两之间相互检测是否相交,如果三个方向是全部相交,则我们判定这两个0BB相交。

3实验结果根据本文中提到的方法,在vc.net的编译环境下使用Di-rect3D渲染某大规模场景,屏幕分辨率设定为1280×1024

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 其它考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1