1

我遇到了一个关于遮挡查询的问题。就我而言,查询结果似乎总是比预期的要大。例如我使用1024*1024的分辨率进行渲染,但是场景中一个物体的查询结果是2085029(>1024*1024)。

使用的查询方法来自GPU Gems Chapter 29

        glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
        glDepthMask(GL_FALSE);
        glBeginQuery(GL_SAMPLES_PASSED, occlusionQuery[0]);

        mesh->Render();

        glEndQuery(GL_SAMPLES_PASSED);
        glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
        glDepthMask(GL_TRUE);
        glGetQueryObjectuiv(occlusionQuery[0], GL_QUERY_RESULT, &screenFragmentCount[0]);

任何人都可以帮忙吗?

4

1 回答 1

4

遮挡查询不会告诉您有多少像素通过了测试。它告诉您有多少片段通过了测试(或更准确地说,“样本”)。

如果您绘制一个三角形,然后在其前面绘制一个三角形,则遮挡查询会计算这两个三角形的碎片,即使较早的三角形被后面的三角形遮挡。三角形按顺序光栅化。因此,在遮挡查询计数增加时,覆盖前面三角形的后面的三角形还没有被光栅化。只有当三角形从最近到最远渲染时,才会计算像这样的自遮挡。

于 2016-12-14T19:13:00.160 回答