Created
February 18, 2025 02:35
-
-
Save partybusiness/de3c1828d2f21bc6d5eb79b9231985be to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
shader_type canvas_item; | |
// draws black dots at corners | |
uniform float dot_size = 30; // size of dots at vertices | |
varying vec2 vertex_uv; // used to pass fake UV since real UV wasn't behaving as expected | |
void vertex() { | |
vertex_uv = COLOR.rg; // using vertex colour because UV array from Polygon2D wasn't working for me? | |
//vertex_uv = UV; | |
} | |
float distance_from_corner(vec2 iuv, vec2 deltaX, vec2 deltaY) { | |
float a = (iuv.y * deltaY.x - iuv.x * deltaY.y) / (deltaX.y * deltaY.x - deltaX.x * deltaY.y); | |
float b = (iuv.x * deltaX.y - iuv.y * deltaX.x) / (deltaX.y * deltaY.x - deltaX.x * deltaY.y); | |
return length(vec2(a,b)); | |
} | |
void fragment() { | |
vec2 deltaX = dFdx(vertex_uv); | |
vec2 deltaY = dFdy(vertex_uv); | |
float corner00 = distance_from_corner(vertex_uv - vec2(0.0, 0.01), deltaX, deltaY); | |
float corner01 = distance_from_corner(vertex_uv - vec2(0.0, 1.0), deltaX, deltaY); | |
float corner11 = distance_from_corner(vertex_uv - vec2(1.0, 1.0), deltaX, deltaY); | |
float corner10 = distance_from_corner(vertex_uv - vec2(1.0, 0.0), deltaX, deltaY); | |
float min_dist = min(min(corner00, corner01), min(corner10, corner11)); | |
COLOR.rgb = vec3(min_dist > dot_size ? 1.0 : 0.0); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment