【发布时间】:2014-10-16 17:40:21
【问题描述】:
如果事先知道障碍物集严格位于相机和要测试的对象之间,如果我完全禁用深度测试,遮挡查询是否仍然有效? 这是一种提高性能的尝试,因为从逻辑上讲,如果没有遮挡物位于被遮挡物后面,我不需要复杂的 z 测试。
我正在使用以下命令来初始化颜色/深度/模板缓冲区:
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 0);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 0);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 0);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 0);
SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 1);
...
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
glDisable(GL_CULL_FACE);
glDisable(GL_DEPTH_TEST);
glDepthMask(GL_FALSE);
glEnable(GL_STENCIL_TEST);
glStencilMask(0x00000001);
...
glClear(GL_STENCIL_BUFFER_BIT);
【问题讨论】:
-
为什么不试试看呢?
-
遮挡查询只计算通过深度测试的样本;模板缓冲区无关紧要。 opengl.org/wiki/Occlusion_Query#Occlusion_queries
-
@ColonelThirtyTwo 我不小心发布了之前的评论。将在几秒钟内重写它。
-
@ColonelThirtyTwo 因为我不知道 Opengl 是如何处理这种情况的。它可能有效,可能无效,有时可能有效......而且谷歌并没有告诉我“嘿,你不能使用禁用深度测试的查询”,所以我最好在互联网上询问人们。
-
我发现这个页面指出:“它返回通过深度和模板测试的样本数量作为结果”。 opengl.org/registry/specs/ARB/occlusion_query.txt 在该页面的多个场合中,看起来模板和深度都在合作计算结果。
标签: opengl sdl stencil-buffer occlusion-culling