Draw grid lines using shader

This commit is contained in:
fieldOfView 2017-09-11 23:39:54 +02:00
parent a4aa134f25
commit 6658e1a9ae
4 changed files with 37 additions and 14 deletions

View file

@ -178,8 +178,9 @@ class BuildVolume(SceneNode):
self._shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "default.shader")) self._shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "default.shader"))
self._grid_shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "grid.shader")) self._grid_shader = OpenGL.getInstance().createShaderProgram(Resources.getPath(Resources.Shaders, "grid.shader"))
theme = Application.getInstance().getTheme() theme = Application.getInstance().getTheme()
self._grid_shader.setUniformValue("u_gridColor0", Color(*theme.getColor("buildplate").getRgb())) self._grid_shader.setUniformValue("u_plateColor", Color(*theme.getColor("buildplate").getRgb()))
self._grid_shader.setUniformValue("u_gridColor1", Color(*theme.getColor("buildplate_alt").getRgb())) self._grid_shader.setUniformValue("u_gridColor0", Color(*theme.getColor("buildplate_grid").getRgb()))
self._grid_shader.setUniformValue("u_gridColor1", Color(*theme.getColor("buildplate_grid_minor").getRgb()))
self._grid_shader.setUniformValue("u_z_bias", 0.000001) self._grid_shader.setUniformValue("u_z_bias", 0.000001)
renderer.queueNode(self, mode = RenderBatch.RenderMode.Lines) renderer.queueNode(self, mode = RenderBatch.RenderMode.Lines)

View file

@ -14,6 +14,7 @@ vertex =
} }
fragment = fragment =
uniform lowp vec4 u_plateColor;
uniform lowp vec4 u_gridColor0; uniform lowp vec4 u_gridColor0;
uniform lowp vec4 u_gridColor1; uniform lowp vec4 u_gridColor1;
@ -21,10 +22,19 @@ fragment =
void main() void main()
{ {
if (mod(floor(v_uvs.x / 10.0) - floor(v_uvs.y / 10.0), 2.0) < 1.0) vec2 coord = v_uvs.xy;
gl_FragColor = u_gridColor0;
else // Compute anti-aliased world-space minor grid lines
gl_FragColor = u_gridColor1; vec2 minorGrid = abs(fract(coord - 0.5) - 0.5) / fwidth(coord);
float minorLine = min(minorGrid.x, minorGrid.y);
vec4 minorGridColor = mix(u_plateColor, u_gridColor1, 1.0 - min(minorLine, 1.0));
// Compute anti-aliased world-space major grid lines
vec2 majorGrid = abs(fract(coord / 10 - 0.5) - 0.5) / fwidth(coord / 10);
float majorLine = min(majorGrid.x, majorGrid.y);
frag_color = mix(minorGridColor, u_gridColor0, 1.0 - min(majorLine, 1.0));
} }
vertex41core = vertex41core =
@ -44,23 +54,37 @@ vertex41core =
fragment41core = fragment41core =
#version 410 #version 410
uniform lowp vec4 u_plateColor;
uniform lowp vec4 u_gridColor0; uniform lowp vec4 u_gridColor0;
uniform lowp vec4 u_gridColor1; uniform lowp vec4 u_gridColor1;
uniform lowp float u_z_bias; //Bias in the depth buffer for rendering this object (to make an object be rendered in front of or behind other objects).
in lowp vec2 v_uvs; in lowp vec2 v_uvs;
out vec4 frag_color; out vec4 frag_color;
void main() void main()
{ {
if (mod(floor(v_uvs.x / 10.0) - floor(v_uvs.y / 10.0), 2.0) < 1.0) vec2 coord = v_uvs.xy;
frag_color = u_gridColor0;
else // Compute anti-aliased world-space minor grid lines
frag_color = u_gridColor1; vec2 minorGrid = abs(fract(coord - 0.5) - 0.5) / fwidth(coord);
float minorLine = min(minorGrid.x, minorGrid.y);
vec4 minorGridColor = mix(u_plateColor, u_gridColor1, 1.0 - min(minorLine, 1.0));
// Compute anti-aliased world-space major grid lines
vec2 majorGrid = abs(fract(coord / 10 - 0.5) - 0.5) / fwidth(coord / 10);
float majorLine = min(majorGrid.x, majorGrid.y);
frag_color = mix(minorGridColor, u_gridColor0, 1.0 - min(majorLine, 1.0));
gl_FragDepth = gl_FragCoord.z + u_z_bias;
} }
[defaults] [defaults]
u_plateColor = [1.0, 1.0, 1.0, 1.0]
u_gridColor0 = [0.96, 0.96, 0.96, 1.0] u_gridColor0 = [0.96, 0.96, 0.96, 1.0]
u_gridColor1 = [0.8, 0.8, 0.8, 1.0] u_gridColor1 = [0.8, 0.8, 0.8, 1.0]
u_z_bias = 0.0
[bindings] [bindings]
u_modelViewProjectionMatrix = model_view_projection_matrix u_modelViewProjectionMatrix = model_view_projection_matrix

View file

@ -247,9 +247,8 @@
"viewport_background": [245, 245, 245, 255], "viewport_background": [245, 245, 245, 255],
"volume_outline": [12, 169, 227, 255], "volume_outline": [12, 169, 227, 255],
"buildplate": [244, 244, 244, 255], "buildplate": [244, 244, 244, 255],
"buildplate_alt": [204, 204, 204, 255],
"buildplate_grid": [129, 131, 134, 255], "buildplate_grid": [129, 131, 134, 255],
"buildplate_grid_minor": [129, 131, 134, 31], "buildplate_grid_minor": [230, 230, 231, 255],
"convex_hull": [35, 35, 35, 127], "convex_hull": [35, 35, 35, 127],
"disallowed_area": [0, 0, 0, 40], "disallowed_area": [0, 0, 0, 40],

View file

@ -170,9 +170,8 @@
"viewport_background": [241, 242, 242, 255], "viewport_background": [241, 242, 242, 255],
"volume_outline": [1, 168, 230, 255], "volume_outline": [1, 168, 230, 255],
"buildplate": [252, 252, 252, 255], "buildplate": [252, 252, 252, 255],
"buildplate_alt": [204, 204, 204, 255],
"buildplate_grid": [129, 131, 134, 255], "buildplate_grid": [129, 131, 134, 255],
"buildplate_grid_minor": [129, 131, 134, 31], "buildplate_grid_minor": [230, 230, 231, 255],
"convex_hull": [35, 35, 35, 127], "convex_hull": [35, 35, 35, 127],
"disallowed_area": [0, 0, 0, 52], "disallowed_area": [0, 0, 0, 52],