我选择的GLFW_SAMPLES实际上做了什么?

时间:2017-03-17 02:45:50

标签: opengl graphics glfw multisampling

设置此变量的作用是什么?例如,如果我将其设置为4,那意味着什么?

我在" Framebuffer相关提示"下阅读glfw.org上的描述(参见此处:GLFW Window Guide)。部分。手册说" GLFW_SAMPLES指定用于多重采样的所需样本数。零禁用多重采样。 GLFW_DONT_CARE表示应用程序没有首选项。"

我还阅读了一般的多重采样说明(见这里:Shawn Hargreaves的Multisampling)。

我对多重采样的含义有一个大概的了解:在调整图像大小和重新绘制图像时,用于重绘图像的点数应该足够接近,以便我们看到的是图像的精确表示。数字示波器也会出现同样的想法 - 假设您正在采样正弦信号。如果采样速率恰好恰好等于波的频率(f),则示波器显示恒定电压,这与您希望看到的输入信号大不相同。为了避免这种情况,奈奎斯特定理告诉我们,我们应该以至少2f的速率进行采样。所以我看到计算机图形学中会出现问题,但我不知道究竟是什么功能

glfwWindowHint(GLFW_SAMPLES, 4);

1 个答案:

答案 0 :(得分:9)

  

设置此变量的作用是什么?例如,如果我将其设置为4,那意味着什么?

GLFW_SAMPLES用于启用多重采样。因此,glfwWindowHint(GLFW_SAMPLES, 4)是一种在您的应用中启用4x MSAA的方法。

4x MSAA意味着窗口缓冲区的每个像素由4个子样本组成,这意味着每个像素由4个像素组成。因此,尺寸为200x100像素的缓冲区实际上是800x400像素。

如果要创建一个比屏幕大4倍的额外帧缓冲区。然后使用它作为具有GL_LINEAR作为过滤器的纹理采样器,基本上可以获得相同的结果。 请注意,这仅适用于4x MSAA,因为GL_LINEAR只需要最接近相关像素的4个样本。

说到抗锯齿,那么使用MSAA是一种非常有效但昂贵的解决方案。如果你想要一个非常干净和美观的结果,那么它绝对是你要走的路。通常选择4x MSAA,因为使用它可以在质量和性能之间取得良好的平衡。

在性能方面更便宜的替代方案是使用FXAA。这是作为后处理步骤完成的,通常是免费的。不同之处在于MSAA以更大的尺寸呈现,并且下采样到所需的尺寸,而不是失去任何质量。 FXAA只是按原样平均像素,基本上使图像模糊。 FXAA通常会给出非常不错的结果。

此外,您的驱动程序很可能默认启用它。但如果它没有使用glEnable(GL_MULTISAMPLE)

最后,如果您还没有,那么我强烈建议您阅读LearnOpenGL's Anti-Aliasing教程。它对所有这些进行了非常深入的解释。