RuntimeData/shader/HexGrid.frag
2020-07-15 19:28:31 +08:00

58 lines
1.1 KiB
GLSL

#version 450 core
layout(location=0) out vec4 FragColor;
layout(binding=1) uniform ColorMaterial
{
vec4 color;
} color_material;
layout(binding=10) uniform WorldMatrix // hgl/math/Math.h
{
mat4 ortho;
mat4 projection;
mat4 inverse_projection;
mat4 modelview;
mat4 inverse_modelview;
mat4 mvp;
mat4 inverse_mvp;
vec4 view_pos;
vec2 canvas_resolution;
vec2 viewport_resolution;
}fs_world;
float Hex( vec2 p, vec2 h )
{
vec2 q = abs(p);
return max(q.x-h.y,max(q.x+q.y*0.57735,q.y*1.1547)-h.x);
}
float HexGrid(vec2 p)
{
float scale = 1.2;
vec2 grid = vec2(0.692, 0.4) * scale;
float radius = 0.22 * scale;
vec2 p1 = mod(p.xy, grid) - grid*0.5;
float c1 = Hex(p1, vec2(radius, radius));
vec2 p2 = mod(p.xy+grid*0.5, grid) - grid*0.5;
float c2 = Hex(p2, vec2(radius, radius));
return min(c1, c2);
}
void main()
{
vec2 uv=(gl_FragCoord.xy-fs_world.canvas_resolution.xy/2.0)/80.0;
float lum=HexGrid(uv);
lum=lum > 0.0 ? 1.0 : 0.0;
FragColor=vec4(color_material.color.rgb*lum,1.0);
}