OpenGL - 不绘制完全遮挡的多边形?

Fej*_*win 4 opengl performance invisible polygon

假设我们有一组多边形,可以改变摄像机视角,并可以在3D环境中平移摄像机.从某些视角,这些多边形中的一些被一个或多个其他多边形完全遮挡.对于每个绘制的帧,我们知道每个多边形的精确坐标,并且可以在"增加到相机的距离"或"减少到相机的距离"顺序中迭代它们.

现在我的问题:

什么是预渲染判断是否多边形被别人完全闭塞,这样我们就可以直接跳过它在拉伸过程中,以提高性能的一个有效方法是什么?

Chr*_*ica 5

您正在寻找的技术称为遮挡剔除,这是一项相当复杂的任务.

能够以增加相机距离顺序(从前到后)迭代它们会给您带来一些好处.只需以这种方式渲染它们,您就可以从nowaday图形硬件的早期z测试功能中获益,而多边形只需要经过顶点处理和光栅化,但不需要进行片段着色.这也可以在不对多边形进行排序的情况下实现,而是在所谓的深度预处理中以任意顺序渲染它们,在此处禁用颜色写入并仅渲染多边形的深度值.现在在下一个渲染过程中(真实的那个)你也可以从早期的z-rejection中获益.

您也可以使用nowaday的GPU的硬件遮挡查询,如本GPU Gems文章中所述.

但是像Hannesh所说的那样,如果遮挡剔除的开销是值得的,那么它应该总是加权.我认为你的案例中的前后排序并不是偶然的.也许深度预通过是一种可行的替代方案,无需排序.虽然您可以以不需要任何排序的方式使用遮挡查询(如链接中所述),但在这种情况下,它不如前后排序有效.