0

对于 WebGL 2 画布,我需要一个简单的“拾取”系统,即在 2D 中给定一个点p,系统可以判断哪个对象(如果有)被渲染到p。(我不需要 CPU 中的选择结果,只需要在着色器中。)

为了实现这一点,每个对象都将使用不同的“颜色 id”渲染到专用于拾取的帧缓冲区。我正在考虑使用 R16UI 或 R32UI 纹理格式和 GL_NEAREST 过滤。我关心的是抗锯齿:我如何保证对象的边缘不会被抗锯齿,从而改变输出值,破坏拾取系统?

我正在寻找禁用抗锯齿的代码,以及从了解标准的人那里得到/不能保证的解释。

4

1 回答 1

1

WebGL(和 OpenGL ES)不会以任何自动方式抗锯齿帧缓冲区。帧缓冲区的抗锯齿是手动操作。在 WebGL1 中,您根本无法对帧缓冲区进行抗锯齿处理。在 WebGL2 中,您将创建一个多重采样渲染缓冲区。因此,基本上,如果您不创建多重采样渲染缓冲区,您将不会获得抗锯齿。

此外,整数和无符号整数纹理不可过滤,这意味着它们仅支持 gl.NEAREST

所以没有什么可以给你看的。如果您使用R16UIorR32UI纹理并对其进行渲染,它将按您希望的方式工作。

于 2018-03-24T17:01:45.433 回答