2016-01-24 122 views
1

我在着色器方面非常新穎,並且一直試圖弄清楚這個好幾個小時......我在glslsandbox上找到了一個繪製簡單網格的着色器。我想了解如何將網格的顏色從小數點更改爲vec3顏色。GLSL - 更改爲vec3顏色

float x = gl_FragCoord.x - gl_FragCoord.y; 
float y = gl_FragCoord.y + gl_FragCoord.x; 
bool grid = mod(x, CELL_SIZE) < LINE_WIDTH || mod(x, CELL_SIZE) < LINE_WIDTH; 
float color = grid ? 1.0 : 0.0; 
gl_FragColor = vec4(vec3(color), 0.2); 

我需要改變該生產線是

float color = grid ? 1.0 : 0.0; 

只允許我使用黑色,白色和灰色。任何想法如何我可以將兩種顏色更改爲vec3?

+1

'lowp VEC 3色=網格? VEC3(0.0):VEC3(1.0)'? – Hamish

回答

2

類似下面應該工作,雖然我還沒有測試它:

lowp vec3 gridColor = vec3(0.5,0.5,0.0); 
lowp vec3 nonGridColor = vec3(0.5,0.0,0.5); 
vec3 colorv = grid ? gridColor : nonGridColor; 
gl_FragColor = vec4(colorv, 0.2); 
+0

你錯過了第三屆vec3的精確限定符;) – Hamish

+0

完美的作品謝謝你!快速的問題是你有什麼理由使用lowp而不是高或med? – andehlu

+0

以及你只使用值到一位小數,所以你根本不需要高精度。對限定符沒有嚴格定義的精度範圍,這取決於具體的實現。使用較低的精度可以在某些情況下提高性能,因此最好儘可能使用它們,儘管對於更詳細的渲染可能需要更高的精度。 – Hamish