我选择GLFW_SAMPLES实际上有什么作用?



设置这个变量有什么作用?例如,如果我将其设置为 4,这意味着什么?

我在"帧缓冲相关提示"部分下阅读了有关 glfw.org 的说明(请参阅此处:GLFW 窗口指南)。手册说:"GLFW_SAMPLES指定了用于多重采样的所需样本数。零禁用多重采样。GLFW_DONT_CARE意味着应用程序没有偏好。

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

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

glfwWindowHint(GLFW_SAMPLES, 4);确实如此。

设置此变量有什么作用?例如,如果我将其设置为 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的抗锯齿教程。它对所有这些进行了非常深入的解释。

相关内容

  • 没有找到相关文章

最新更新