我选择 GLFW_SAMPLES 的实际作用是什么?
What does my choice of GLFW_SAMPLES actually do?
设置这个变量有什么作用?例如,如果我将它设置为 4,那是什么意思?
我在 "Framebuffer related hints" 部分阅读了关于 glfw.org 的描述(参见此处:GLFW Window Guide)。手册说 "GLFW_SAMPLES specifies the desired number of samples to use for multisampling. Zero disables multisampling. GLFW_DONT_CARE means the application has no preference."
我还阅读了一般的多重采样描述(参见此处:Shawn Hargreaves 的 Multisampling)。
我对多重采样的含义有一个粗略的了解:在调整图像大小和重绘图像时,用于重绘图像的点数应该足够接近,以便我们看到的是图像的准确表示。同样的想法也出现在数字示波器上——假设您正在对正弦信号进行采样。如果采样率刚好恰好等于波的频率 (f),则示波器会显示恒定电压,这与您希望看到的输入信号有很大不同。为避免这种情况,奈奎斯特定理告诉我们应该以至少 2f 的速率进行采样。所以我看到计算机图形学怎么会出现问题,但我不知道具体的功能是什么
glfwWindowHint(GLFW_SAMPLES, 4);
会。
What does setting this variable do? For instance, if I set it to 4, what does that mean?
GLFW_SAMPLES
用于启用多重采样。所以 glfwWindowHint(GLFW_SAMPLES, 4)
是一种在您的应用程序中启用 4x MSAA 的方法。
4x MSAA 表示 window 缓冲区的每个像素由 4 个子样本组成,也就是说每个像素由 4 个像素组成。因此,大小为 200x100 像素的缓冲区实际上是 800x400 像素。
如果您要创建一个比屏幕大 4 倍的额外帧缓冲区。然后将它用作纹理采样器,使用 GL_LINEAR
作为过滤器,基本上可以达到相同的结果。 请注意,这仅适用于 4x MSAA,因为 GL_LINEAR
仅采用最接近相关像素的 4 个样本。
谈到抗锯齿,使用 MSAA 是一种非常有效但昂贵的解决方案。如果你想要一个非常干净和漂亮的结果,那么它绝对是要走的路。通常选择 4x MSAA,因为使用它可以很好地平衡质量和性能。
就性能而言更便宜的替代方案是使用 FXAA。这是作为 post 处理步骤完成的,通常是免费的。不同之处在于,MSAA 以更大的尺寸进行渲染,然后将采样率降低到所需的尺寸,而不会损失任何质量。而 FXAA 只是按原样对像素进行平均,基本上使图像模糊。 FXAA 通常会给出非常不错的结果。
此外,您的驱动程序很可能会默认启用它。但如果没有,则使用 glEnable(GL_MULTISAMPLE)
.
最后,如果您还没有阅读过,我强烈建议您阅读 LearnOpenGL's Anti-Aliasing 教程。它对所有这些都给出了非常深入的解释。
设置这个变量有什么作用?例如,如果我将它设置为 4,那是什么意思?
我在 "Framebuffer related hints" 部分阅读了关于 glfw.org 的描述(参见此处:GLFW Window Guide)。手册说 "GLFW_SAMPLES specifies the desired number of samples to use for multisampling. Zero disables multisampling. GLFW_DONT_CARE means the application has no preference."
我还阅读了一般的多重采样描述(参见此处:Shawn Hargreaves 的 Multisampling)。
我对多重采样的含义有一个粗略的了解:在调整图像大小和重绘图像时,用于重绘图像的点数应该足够接近,以便我们看到的是图像的准确表示。同样的想法也出现在数字示波器上——假设您正在对正弦信号进行采样。如果采样率刚好恰好等于波的频率 (f),则示波器会显示恒定电压,这与您希望看到的输入信号有很大不同。为避免这种情况,奈奎斯特定理告诉我们应该以至少 2f 的速率进行采样。所以我看到计算机图形学怎么会出现问题,但我不知道具体的功能是什么
glfwWindowHint(GLFW_SAMPLES, 4);
会。
What does setting this variable do? For instance, if I set it to 4, what does that mean?
GLFW_SAMPLES
用于启用多重采样。所以 glfwWindowHint(GLFW_SAMPLES, 4)
是一种在您的应用程序中启用 4x MSAA 的方法。
4x MSAA 表示 window 缓冲区的每个像素由 4 个子样本组成,也就是说每个像素由 4 个像素组成。因此,大小为 200x100 像素的缓冲区实际上是 800x400 像素。
如果您要创建一个比屏幕大 4 倍的额外帧缓冲区。然后将它用作纹理采样器,使用 GL_LINEAR
作为过滤器,基本上可以达到相同的结果。 请注意,这仅适用于 4x MSAA,因为 GL_LINEAR
仅采用最接近相关像素的 4 个样本。
谈到抗锯齿,使用 MSAA 是一种非常有效但昂贵的解决方案。如果你想要一个非常干净和漂亮的结果,那么它绝对是要走的路。通常选择 4x MSAA,因为使用它可以很好地平衡质量和性能。
就性能而言更便宜的替代方案是使用 FXAA。这是作为 post 处理步骤完成的,通常是免费的。不同之处在于,MSAA 以更大的尺寸进行渲染,然后将采样率降低到所需的尺寸,而不会损失任何质量。而 FXAA 只是按原样对像素进行平均,基本上使图像模糊。 FXAA 通常会给出非常不错的结果。
此外,您的驱动程序很可能会默认启用它。但如果没有,则使用 glEnable(GL_MULTISAMPLE)
.
最后,如果您还没有阅读过,我强烈建议您阅读 LearnOpenGL's Anti-Aliasing 教程。它对所有这些都给出了非常深入的解释。