OBB盒的实现

本文介绍了在几何仿真中的碰撞检测,特别是OBB(oriented bounding box)的实现。OBB是一种能紧密包围对象的包围盒,其相交测试基于分离轴理论。通过计算对象在15条可能的轴上的投影来判断两个OBB是否相交。文章还提供了一个简单的OBB类实现,包括顶点、旋转、投影和相交测试等功能。
摘要由CSDN通过智能技术生成

制造几何仿真中的碰撞检测通常视为针对刚体对象间的碰撞检测,这样的话可以把非刚体即软体的建模和变形算法对碰撞检测的影响减少到最小。常见成熟的基于包围盒的碰撞检测(box intersection test)算法如:

1)沿坐标轴的包围盒AABB(axis-aligned bounding boxes)在碰撞检测的研究历史中使用得最久最广, 一个给定对象的AABB被定义为包含该对象且各边平行于坐标轴的最小的六面体。

AABB间的相交测试也比较简单,两个AABB相交当且仅当它们在三个坐标轴上的投影区间均重叠。定义AABB的六个最大最小值分别确定了它在三个坐标轴上的投影区间,因此AABB间的相交测试最多只需要六次比较运算。

2)包围球类似于AABB,也是简单性好紧密性差的一类包围盒,包围球被定义为包含该对象的最小的球体,计算给定对象E的包围球,首先需确定包围球的球心c,再由球心与三个最大值坐标所确定的点间的距离计算半径r。包围球的计算时间略多于AABB,但存储一个包围球只需两个浮点数。

3)方向包围盒OBB(oriented bounding box)是比较著名的一个包围盒类型。一个给定对象的OBB被定义为包含该对象且相对于坐标轴方向任意的最小的长方体。OBB最大特点是它的方向的任意性,这使得它可以根据被包围对象的形状特点尽可能紧密地包围对象,但同时也使得它的相交测试变得复杂。

OBB间的相交测试基于分离轴理论(separating axis test)。若两个OBB在一条轴线上(不一定是坐标轴)上的投影不重叠,则这条轴称为分离轴。若一对OBB间存在一条分离轴,则可以判定这两个OBB不相交。对任何两个不相交的凸三维多面体,其分离轴要么垂直于任何一个多面体的某一个面,要么同时垂直于每个多面体的某一条边。因此,对一对OBB,只需测试15条可能是分离轴的轴(每个OBB的3个面方向再加上每个OBB的3个边方面的两两组合),只要找到一条这样的分离轴,就可以判定这两个OBB是不相交的,如果这15条轴都不能将这两个OBB分离,则它们是相交的。 

可以在运动过程中使用OBB进行初次碰撞检测,如果没有碰撞,则忽略进行下一个检测,如果发生碰撞,则调用更精细的碰撞检测。作者定义的包围盒(bounding box)和实现如下:

 

 

 

class Point3D 
{
public:
    double x;
    double y;
    double z;
p

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值