[包围体检测]

一.综述

可见面检测(visible surface determination,VSD),这一阶段我们要检测哪些物体是可见的,或者说应该被传入下一阶段进行渲染的,应该是尽可能多的去除不可见的物体

二.包围体检测

我们通常会将场景分解成若干个部分,我们可以对每个部分进行基于包围体的VSD探测,,基本思想就是确定一个包围体,保证如果包围体不可见,那么内部的三角形全部不可见,对于大的场景这种包围体检测比三角形检测效率更高。

方法:使用裁剪矩阵将八个顶点转换到裁剪空间,然后对六个平面逐个测试,裁剪空间其实是一个长方体,我们只需要简单的比较x,y,z的值就可以判断是否在裁剪面内部或者外部

三.空间分割技术

更高级的VSD算法

包围体检测是一个个的进行可见性检测,而实际上我们往往需要快速高效的剔除一组几何体,而多少个为一组呢,过多的话那么可能不容易去掉他,过少的话剔除的速度又会很慢,

1.网格系统

网格系统规则均匀的分割空间,这也存在问题,大多数物体都是不规则的,复杂的,这种划分方法可能不会很高效

2.四叉树和八叉树

自适应空间分割,即在有必要的地方做分割,2D中使用四叉树,3D中使用八叉树

四叉树:

(1)2D中由根节点包含着整个场景,然后每个节点包含四个子节点,依次向下,不断缩小节点的包围范围,从而确定了我们场景中的每个物体所在的节点、

(2)不在分割的依据:节点内物体或者三角形数目已经很少;子节点足够小无法进一步细分;达到了树的深度限制

(3)四叉树一旦建好,就定位了所有物体,我们就可以用它作为物体剔除和碰撞检测的有效工具,如果我们能在某一级抛弃节点,则它的所有子节点都可以一次抛弃

3.BSP树(二叉空间分割树)

形式:每个节点偶有两个子节点,子节点由分割平面隔开,在四叉树和八叉树中分割平面是轴对齐的,BSP要比相应的八叉树存储更多的数据,当然也更加复杂,构造BSP是很困难但又很重要的。

你可能感兴趣的:([包围体检测])