2016-01-24 124 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