【问题标题】:OPENGL ARB_occlusion_query Occlusion CullingOPENGL ARB_occlusion_query 遮挡剔除
【发布时间】:2011-08-08 16:04:31
【问题描述】:
for (int i = 0; i < Number_Of_queries; i++)
{
    glBeginQueryARB(GL_SAMPLES_PASSED_ARB, queries[i]);

    Box[i]

    glEndQueryARB(GL_SAMPLES_PASSED_ARB);
}

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

测试框 A -> 渲染框 A

测试框 B -> 渲染框 B

测试框 C -> 渲染框 C

等等……

【问题讨论】:

  • 由于您是新来的,请务必了解接受和投票功能。

标签: opengl culling occlusion occlusion-culling


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我认为(链接 GPU gems 文章会很好...)您对一些异步查询感到困惑,如扩展中所述:

    http://developer.download.nvidia.com/opengl/specs/GL_NV_conditional_render.txt

    如果我没记错的话,还有其他扩展可以在不阻塞的情况下检查结果的可用性。

    正如 Christian Rau 指出的那样,仅仅“查询、等待结果、根据结果做事”可能会停滞不前,并且可能不会因此而获得任何收益,这取决于“做事”中的工作量。事实上,进行查询,等待它往返只是为了保存一个绘图调用很可能根本没有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-27
      • 2014-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多