摘要: 相交性测试的目的是检测两个几何图元是否相交,在某些情况下还要求出相交部分,这些基本测试构成了碰撞检测系统的基础。碰撞检测用来防止物体互相穿越,或者使物体看起来好像互相被弹开。
我们将讨论两种不同类型的相交性测试:
(1)静态测试检测两个静止图元是否相交。它是一种布尔型测试----也就是说,测试结果只有真(相交时)或假(不相交时)。如果两个图元相交,则可以获取更多的信息。但一般来说,这种测试的目的只是返回一个布尔值。
阅读全文
摘要: 考虑2D中的直线L,L由所有满足p . n = d的点p组成。
其中n是单位向量,我们的目标是对任意点q,找出直线L上距q距离最短的点q',它是q投影到L上的结果。让我们画一条经过q平行于L的辅助线M,如图13.1所示。设nM和dM分别为直线方程的法向量和d值。因为L和M平行,所以它们的法向量相等:nM=n。又因为q在M上,所以dM为q.n。
阅读全文
摘要: 通过定义一个布尔函数f(x, y , z),我们能够隐式表示一个图元。如果所指定的点在这个图元上,这个布尔函数就为真;对于其他的点,这个布尔函数为假。例如等式:
x2+y2+z2 = 1
对中心在原点的单位球表面上的所有点为真,隐式表示法用于测试图元是否包含某点时非常有用。
阅读全文
摘要: 一般来说,多边形是由顶点和边构成的平面物体。
简单多边形不包含"洞",复杂多边形可能包含"洞"(图12.26)。简单多边形可以通过沿多边形列出的所有顶点来描述(左手坐标系中,通常以从多边形正面看时的顺时针方向列出所有点)。简单多边形的使用频率比复杂多边形高得多。
阅读全文
摘要: 虽然我们经常在3D中使用三角形,但三角形的表面是一个平面,它天生是一个2D物体。在3D中任意朝向的三角形表面上移动是一件令人烦恼的事,最好是有一个坐标空间与三角形表面相关联且独立于三角形所在的3D坐标空间,重心坐标空间正是这样的坐标空间。
三角形所在平面的任意点都能表示为顶点的加权平均值,这个权就称作重心坐标,从重心坐标(b1,b2,b3)到标准3D坐标的转换为:
(b1,b2,b3) <==> b1v1 + b2v2 + b3v3
公式12.21 从重心坐标中计算3D点坐标
阅读全文
摘要: 三角形在建模和图形学中有着极其重要的位置。复杂3D物体的表面,如车或人体,都是用三角形模拟的,像这样一组相连的三角形称作三角网格。
三角形是通过列出它的三个顶点来定义的。这些点的顺序是非常重要的,在左手坐标系中,当从三角形"正面"看时,经常以顺时针方向列出这些点,设这三个顶点为v1、v2、v3。三角形位于一个平面中,这个平面的方程(法向量n和到原点的距离d)在很多应用中非常重要。
阅读全文
摘要: 在3D中,平面是到两个点的距离相等的点的集合。平面完全是平的,没有厚度,且无限延伸。
可以用类似于定义直线的方法来定义平面,平面的隐式定义由所有满足平面方程的点p=(x, y, z)给出,平面方程的两种记法如公式12.11所示:
ax + by + cz = d
p . n = d
公式12.11 平面方程
阅读全文
摘要: 另一种常见的用来界定物体的几何图元是矩形边界框,矩形边界框可以是与轴对齐的或是任意方向的。轴对齐矩形边界框有一个限制,就是它的边必须垂直于坐标轴。缩写AABB常用来表示axially aligned bounding box(轴对齐矩形边界框),OBB用来表示oriented bounding box(方向矩形边界框)。轴对齐矩形边界框不仅容易创建,而且易于使用。
一个3D的AABB就是一个简单的六面体,每一边都平行于一个坐标平面。矩形边界框不一定是立方体,它的长、宽、高可以彼此不同。在图12.10中,画出了一些简单的3D物体和它们的AABB。
阅读全文
摘要: 2D中,可以使用公式12.3隐式表示直线:
ax + by = d
公式12.3 2D直线的隐式定义
另一种表示方法为,设向量n = [a, b],用向量记法将公式12.3写为公式12.4的形式:
p . n = d
公式12.4 用向量记法的2D直线的隐式定义
阅读全文
摘要: 通过定义一个布尔函数f(x, y , z),我们能够隐式表示一个图元。如果所指定的点在这个图元上,这个布尔函数就为真;对于其他的点,这个布尔函数为假。例如等式:
x2+y2+z2 = 1
对中心在原点的单位球表面上的所有点为真,隐式表示法用于测试图元是否包含某点时非常有用。
阅读全文