注:标准物体为第十章内容。
剔除是指去掉完全位于视景体之外的物体。
剔除分为背面剔除和物体剔除。
标准物体包括线(直线,射线,线段),面, AABB , OBB ,椭球体,圆柱体,圆锥体,球移动体。
一,背面剔除。
这里的面指的是单侧面,即只有朝外的面可见,另一面朝向物体内侧(不透明物体),不可见。
1. 基本思路。
假设平面的方程为 , 视点的世界坐标为 E 。则当平面法向量指离观察者时,点 E 位于平面的负方向一侧,即:
2. 眼空间下的判断。
视点 P=(0,0,0,1); 如下图:
平面朝前需满足的条件是:
即 det ( M ) >0
3. 裁减空间下的判断。
已知
由此可得,
二,标准物体。
1. 直线,射线和线段。
直线:
其中, P 为直线上一点, D 为直线的方向向量。
射线:
其中, P 为射线的起点, D 为方向向量。
线段:表达式一:
其中, P0 P1 为线段的起点和终点。方向向量为
表达式二:
其中 C 为线段的中点, D 为方向向量, r 为线段长度的一半 .
注:在这里,作者推荐第二种表示方法,原因是可以减少许多数值上的问题。如与 0 的比较。
在与 0 进行判断的时候,只要该数和 0 的差值小于某个常量,就可认为其等于 0 。许多数值问题都是有 0 和非常大的量引起的。
2. 面
( 1 )一般表达式: 或者
对于前者, P=dN 。
(2) 三角形的表示:
其中,
对于三角形内的点,满足 对于三角形外的点, 取任意实数。
的求法如下:
两边点乘 和 得到线性方程组
可得到 因此
(3) 矩形的表示。
其中, C 为矩形的中心点。
(4) 基于平面的三维坐标系。
VU 的求法见 P533
3. 椭球体
参数方程:
其中, a1 a2 a3 为三个轴的半轴长。
矩阵方程:
其中, C 为中心点, R 为旋转矩阵 ,D 为
4. 圆柱体
参数方程:
其中, P 为圆柱底面的圆心, D , U, V 为圆柱的坐标基, r 为圆柱的半径。
矩阵方程:
其中, I 为单位矩阵。
5. 圆椎体
参数方程:
矩阵方程:
限制条件:
6. 球移动体
球移动体变得越来越流行,因为它使相交性检测变得更加方便。
它是由一个球体沿着某条线段,某个面或某个立方体移动而形成的。
判断某个点 X 是否在球移动体内的方法:
只要存在点 ,使得
其中, M 是指体内部的线段,平面或立方体。
因此表示一个球移动体需要知道 M 的方程和球的半径 r
常见的球移动体有球(基体为一个点),胶囊(基体为一条线段), lozenge (基体为多边形),圆环体(基体为圆),方向盒(基体为立方体)。
三,基于包围体的物体剔除。
基本思路:由于这里的包围体都是标准物体,因此都是凸多面体,也就意味着包围体的所有点在裁减面上的投影值 为一单调区间 ,假设裁减面方程为 因此,只要满足 ,包围体即被剔除。因此,包围提剔除的关键在于区间极值的计算。
1. 方向盒。
通过几何直观,我们可以知道方向盒的投影值极大值必然由方向盒八个顶点中的一个点的投影值决定。也就是说,八个投影值中的最大值就是区间最大值。
已知方向盒八个顶点的表示如下:
投影值为:
由此可知,投影值极大值为
, 其中
2. 球
球在裁减面法线上的投影极值由法线与球面的两个交点决定:
因此,投影值极大值为:
3. 胶囊
通过几何直观可知,投影极值必由端点球面上的某个点决定。法线与两个球面的交点可表示为:
由此可知,极大值为:
/
4. 以矩形为基体的球移动体。
通过几何直观可知,决定投影极值的是裁减面法线与四个顶点球面的交点。表示如下:
投影值的极大值为:
5. 椭球体
6. 圆柱体
其中,
投影极大值为
其中,
下面说明 r 是如何得到的。
通过几何直观可知,决定投影极值的点一定位于圆柱体的两个底面圆上,因此 t 取 h/2 ,
仔细观察 可知,这实际上是两个向量的点乘:
显然,当这两个向量方向相同时,点乘值最大,此时点乘值为两个向量模长的乘积即:
7. 圆锥体
计算过程较繁琐,从略。
区间极值表示见书。