图形学的数学基础(二十一):包围盒(Bounding Box)

1,309 阅读2分钟

本文已参与[新人创作礼]活动,一起开启掘金创作之路

转载请注明出处.

图形学的数学基础(二十):包围盒(BoundingBoxBounding Box)

包围盒是一种求解离散点集最优包围空间的算法,基本思想是用体积稍大且特性简单的集合体来近似代替复杂的几何对象。包围盒常用于几何物体的碰撞检测,ray-tracing中光线求交等。常用的包围盒有两种,AABBOBBAABB与OBB,AABB包围盒是轴对齐的,而OBBOBB是任意定向的。

AABBAABB

AABBAABBAxially  Aligned  Bounding  BoxAxially\;Aligned\;Bounding\;Box的缩写,三维AABBAABB是一个简单的6面盒子,每一面都与一个主要平面平行,这个盒子不一定是立方体,盒子的长度宽度高度可以各自不同。

重要属性

几何体AABBAABB包围盒内的点满足以下不等式:

xmin<=x<=xmaxx_{min} <= x <= x_{max}

ymin<=y<=ymaxy_{min} <= y <= y_{max}

zmin<=z<=zmaxz_{min} <= z <= z_{max}

两个具有特殊意义的点:

  • 最小值:Pmin=[xmin,ymin,zmin]\textbf{P}_{min} = [x_{min}, y_{min}, z_{min}]

  • 最大值:Pmax=[xmax,ymax,zmax]\textbf{P}_{max} = [x_{max}, y_{max}, z_{max}]

中心点可以通过最小值和最大值的中点计算得出:

c=(Pmin+Pmax)2\textbf{c} = \dfrac{(\textbf{P}_{min} + \textbf{P}_{max})}{2}

大小矢量(Size  VectorSize\;Vector)ss是从Pmin\textbf{P}_{min}Pmax\textbf{P}_{max}的矢量,该矢量的三个分量分别代表了包围盒的长宽高信息。

表示法

一般情况下会使用Pmin\textbf{P}_{min}Pmax\textbf{P}_{max}表示包围盒。

1.png

计算AABBAABB

针对一组点计算AABBAABB是一个很简单的过程,首先初始化min和max两个值,初始值分别设置为最大值和最小值,遍历点位集合,分别比较判断min,maxmin,max的三个分量,将当前最小值赋给minmin最大值赋给maxmax

2.png

变换AABBAABB

有时候我们需要将AABBAABB从一个坐标空间转换为另一个坐标空间。假设在对象空间中有AABBAABB,现在希望在世界空间中获得AABBAABB,其中一种做法就是,可以基于变换后的几何体顶点,重新计算包围盒,但是针对复杂的几何体,顶点数量特别多,这种计算是相对昂贵的,因此在世界空间中获得AABBAABB,就需要考虑变换对象空间的AABBAABB

光线与AABBAABB求交

OBBOBB

参考

《3D数学基础》图形和游戏开发(第二版)