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

等等...

最佳答案

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

10-08 11:36