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

Mik*_*ell 10 opengl graphics multisampling glfw

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

我在"Framebuffer相关提示"部分下阅读了glfw.org上的描述(参见这里:GLFW窗口指南).手册中说"GLFW_SAMPLES指定了用于多重采样的所需样本数.Zero禁用多重采样.GLFW_DONT_CARE表示应用程序没有首选项."

我还阅读了一般的多重采样说明(参见此处: Shawn Hargreaves的多重采样).

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

glfwWindowHint(GLFW_SAMPLES, 4); 确实.

Val*_*tin 11

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