我希望在我的OpenGL 3D渲染器上实现伽马校正,我知道这对于在sRGB中加载的纹理非常重要,因此我这样做:
vec4 texColor;
texColor = texture(src_tex_unit0, texCoordVarying);
texColor = vec4(pow(texColor.rgb,vec3(2.2)),1.0);
vec4 colorPreGamma = texColor * (vec4(ambient,1.0) + vec4(diffuse,1.0));
fragColor = vec4(pow(colorPreGamma.rgb, vec3(1.0/gamma)),1.0);
但我的问题是关于纯色的,当我想要点亮的3D物体表面不是贴图而仅由每个顶点的RGB值着色时。在这种情况下,我是否需要将我的颜色转换为线性空间,然后在光照操作之后再像处理纹理一样转换回伽马空间?
当我的光源有颜色时,这是否适用?