2017-06-15 117 views
0

在GLSL中,outputColour = vec3(0, 0, 0.5)输出RGB值为(0, 0, 127)而不是(0, 0, 128)。由GL.ReadPixels()和Photoshop吸管工具确认。GLSL颜色输出与RGB相差一个

目前我正在绕过outputColour.b += 0.001这个问题,但我确定会在以后再次出现。

有没有任何机构经历过这个,以及解决方案是什么?

+0

它是有道理的,因为8位最大值是255.尝试'128.0/255.0' – 1000ml

回答

4

每当OpenGL被要求convert a float to a normalized integer时,允许实现舍入,但它喜欢。所以如果它想剔除小数,那很好。

如果您需要控制规范化的舍入,然后直接控制它。

vec4 NormalizeColor(in vec4 input) 
{ 
    vec4 denorm = input * 255.0; 
    vec4 rounded = round(denorm); 
    return rounded/255.0; 
} 

你可以用你喜欢的任何东西来替换呼叫round