Occlusion_query的学习与使用

硬件occlusion query目前有三种,依其历史上出现先后排序为:HP_occlusion_test、NV_occlusion_query、ARB_occlusion_query。

首先给出相关资源列表:
1.  http://www.codesampler.com/oglsrc/oglsrc_7.htm#ogl_occlusion_query
2.  http://www.opengl.org/registry/specs/NV/occlusion_query.txt
3.  http://oss.sgi.com/projects/ogl-sample/registry/ARB/occlusion_query.txt
4.  Nvidia GDC2002_occlusion.pdf

occlusion query是用Depth Buffer判断几何体的可见性,此功能的用途较为广泛,如用它可做以下工作:1.Incremental Object-level Culling 2.Order Independent Transparency 3.Lens Flares,Halos,etc 4.Stencil Shadow Volumes


HP_occlusion_test的缺点:
1.它的返回值只有True和False两种状态,而很多时候我们是需要知道通过Depth Test的Pixel(Sample)个数的.
2.它是一种"Stop-and-wait"模式,当有多个查询时,这样会消耗很多时间,因为必须等到取得了前一个查询结果才能进行下一次查询.


NV_occlusion_query解决了以上两个问题.
1.它能返回通过Depth Test的Pixel(Sample)个数,我们可以对一个Geometry的包围盒作NV_occlusion_query,利用其通过的Pixel(Sample)个数近似确定渲染应采用的细节度Level of detail,或者只有当通过的Pixel个数大于某个阈值时再绘制这个Geometry.
2.可以同时进行多个查询,在所有查询后再随意取得某个查询结果,这样解放了等待时间.可以在查询的时候做其他一些工作,如CPU进行其他计算,不会防碍CPU与GPU的并行性.

对于NV_occlusion_query的详细运用,在Nvidia的GDC2002_occlusion.pdf中有较为详细的描述,我还没有看.
在CULLIDE: Interactive Collision Detection Between Complex Models in Large Environments using Graphics Hardware一文中利用了此功能做碰撞检测:当一个Geometry相对于Depth Buffer完全可见时,则此Geometry与Depth Buffer中已经绘制的Geometries不会发生碰撞,文章就是利用这样的思想去做碰撞检测的排除。

ARB_occlusion_query与NV_occlusion_query本质相同,只是更加标准化了,也稍微有所完善吧。详情见:http://oss.sgi.com/projects/ogl-sample/registry/ARB/occlusion_query.txt。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值