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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值