Opengl GL_SRGB8_ALPHA8对纹理插值的影响?

Opengl GL_SRGB8_ALPHA8对纹理插值的影响?,opengl,textures,interpolation,Opengl,Textures,Interpolation,OpenGL允许用户通过使用GL_SRGB8_ALPHA8将纹理声明为在sRGB中(图像通常是这样),这将导致OpenGL在GLSL中对纹理进行采样时将sRGB颜色转换为线性RGB空间。这也称为“伽马校正” 我还读到,纹理中的线性插值在GL_SRGB8_ALPHA8中的行为会有所不同,因为插值也会发生在线性空间中。这有什么影响(如果有的话)?这是否意味着应该始终使用GL_SRGB8_ALPHA8进行纹理处理,而不是通过GLSL进行自己的sRGB->线性转换?作为旁注,这是关于这一点的说明(引用“

OpenGL允许用户通过使用
GL_SRGB8_ALPHA8
将纹理声明为在sRGB中(图像通常是这样),这将导致OpenGL在GLSL中对纹理进行采样时将sRGB颜色转换为线性RGB空间。这也称为“伽马校正”


我还读到,纹理中的线性插值在
GL_SRGB8_ALPHA8
中的行为会有所不同,因为插值也会发生在线性空间中。这有什么影响(如果有的话)?这是否意味着应该始终使用
GL_SRGB8_ALPHA8
进行纹理处理,而不是通过GLSL进行自己的sRGB->线性转换?

作为旁注,这是关于这一点的说明(引用“8.24 sRGB纹理颜色转换”一节):

理想情况下,实现应该执行 在过滤之前对每个样本进行颜色转换,但 允许实现 在过滤后执行此转换(尽管 后滤波方法 不如在过滤之前从sRGB转换)


因此,规范不能保证您的理想行为。

事实上,大多数图像都在sRGB空间中。如果在渲染时将图像数据加载到OpenGL或着色器中时不进行任何特殊处理,则会得到“错误”的图像-这是在非线性数据上应用线性计算。它看起来比渲染此类图像时的颜色要暗

但是,如果要转换为线性空间,还应将最终渲染图像转换回sRGB空间,因为通常监视器应用2.2伽马曲线(与LCD屏幕之前的CRT输出兼容)

因此,您可以在着色器中手动执行此操作,也可以使用sRGB扩展,这是为纹理(从sRGB转换为线性)和帧缓冲区(从线性自动转换回sRGB)提供的。要获得正确的图像,应该应用两种转换


启用gamma校正并正确操作,可获得更自然、更柔和的图像。查看这篇文章以获得更详细的解释

我想你错过了这个问题。