improved frustum culling--game programming gems 5-1.6

frustum culling是可见性检测中一种重要方法,当然也是优化 的重头戏之一;

目前经常使用的是camera所形成的frustum平面culling的方法:

首先根据camera的几项重要value我们有:

  1. near/far plane
  2. fov:field of view--远平面的height/far;
  3. aspect:远平面的width/heith或者width/height

根据这些我们可以构造6个平面,

对于空间一点p:(x,y,z),可以用平面公式 dot[(x,y,z,1),(px,py,pz,w)]判断其在平面正面或者背面;

进而可以得到complete out, intersect, complete in这样的结果;

计算过程需要6次dot;

这是对多平面的通用做法,没有用到frustum的特性,所以不是最好;

在game programming gems 1.6章节中,提倡利用frustum的特性,以极坐标的方式看待frustem,那么对于3D空间中frustum我们可以把它看成(半径,fov_w,fov_h),进而进行判断,这样进行判断就只用3个dot就可以;

判断过程快了1倍;

另外现在场景组织中经常用BVTree(bounding volume tree)这种,层次化结构,它的优势显而易见,而在我们的frustum可见性判断过程中可以进一步优化:

如果一个bounding volume不是complete in/comple out,但是它在near/far这一项上是complete in的,就可以在children判定的部分免去判定near/far这一项;

pretty good an article;


原文链接: http://blog.csdn.net/ccanan/article/details/1566541

你可能感兴趣的:(improved frustum culling--game programming gems 5-1.6)