OPENGL ARB_occlusion_query遮挡剔除

Dav*_*ave 5 opengl occlusion culling occlusion-culling

for (int i = 0; i < Number_Of_queries; i++)
{
    glBeginQueryARB(GL_SAMPLES_PASSED_ARB, queries[i]);

    Box[i]

    glEndQueryARB(GL_SAMPLES_PASSED_ARB);
}
Run Code Online (Sandbox Code Playgroud)

我很好奇GPU GEMS 1中建议的用于遮挡剔除的方法,其中执行了一定数量的查询.使用所描述的方法,您无法相互测试各个盒子,所以您应该执行以下操作吗?

测试盒A - >渲染框A.

测试盒B - >渲染框B.

测试盒C - >渲染框C.

等等...

Chr*_*ica 2

我不确定我是否理解正确,但这不是首先渲染所有框(而不是写入深度缓冲区)然后使用查询结果检查每个对象的幼稚实现的缺点之一吗?但是您建议立即使用单个框的查询结果是一种更加幼稚的方法,因为这会导致管道停顿。如果你进一步阅读本章(假设你参考第 29 章),他们提出了一种简单的技术来克服这两种简单方法的缺点(即,正常渲染所有内容并使用前一帧的查询结果)。