设置此变量有什么作用?例如,如果我将其设置为4,那是什么意思?
我在“与帧缓冲区有关的提示”部分下阅读了glfw.org上的描述(请参见此处:GLFW Window Guide)。该手册说:“GLFW_SAMPLES指定用于多重采样的所需样本数。零则禁用多重采样。GLFW_DONT_CARE表示该应用程序无偏好。”
我还阅读了一般的多重采样说明(请参见此处:Shawn Hargreaves的Multisampling)。
我对多重采样的含义有一个大概的了解:调整大小和重绘图像时,用于重绘图像的点数应足够接近,以使我们看到的是图像的准确表示。数字示波器也出现了同样的想法-假设您正在采样正弦信号。如果采样率恰好恰好等于波形的频率(f),则示波器会显示一个恒定电压,该电压与您希望看到的输入信号有很大不同。为避免这种情况,奈奎斯特定理告诉我们,采样率至少应为2f。因此,我了解了计算机图形学中如何出现问题,但我不知道该函数到底有什么作用glfwWindowHint(GLFW_SAMPLES, 4);
可以。
最佳答案
GLFW_SAMPLES
用于启用多重采样。因此,glfwWindowHint(GLFW_SAMPLES, 4)
是在应用程序中启用4x MSAA的一种方法。
4x MSAA表示窗口缓冲区的每个像素都包含4个子样本,也就是说每个像素都包含4个像素。因此,大小为200x100像素的缓冲区实际上将为800x400像素。
如果要创建一个比屏幕大4倍的附加帧缓冲区。然后将其用作带有GL_LINEAR
作为过滤器的纹理采样器,基本上可以获得相同的结果。请注意,这仅是4x MSAA的情况,因为GL_LINEAR
仅获取最接近所关注像素的4个样本。
在抗锯齿方面,使用MSAA是一个非常有效但昂贵的解决方案。如果您想要一个非常干净且美观的结果,那么绝对是一种方法。通常选择4倍MSAA,因为使用它在质量和性能之间取得了很好的平衡。
就性能而言,更便宜的替代方法是使用FXAA。这是作为后处理步骤完成的,通常不需任何费用。不同之处在于MSAA会渲染更大的尺寸,然后将其下采样到所需的尺寸,而不会降低任何质量。 FXAA只是按原样平均像素,基本上使图像模糊。 FXAA通常会给出非常不错的结果。
同样,您的驱动程序很可能会默认启用它。但是,如果不这样做,请使用glEnable(GL_MULTISAMPLE)
。
最后,如果您还没有的话,我强烈建议您阅读LearnOpenGL's Anti-Aliasing教程。它为所有这些提供了真正深入的解释。
关于opengl - 我选择的GLFW_SAMPLES实际上有什么作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42848322/