2017-06-15 121 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