fun with dots
This commit is contained in:
@@ -3,16 +3,57 @@ $input v_uv0
|
||||
|
||||
#include "common.sh"
|
||||
|
||||
float circle(vec2 uv, vec2 center, float size)
|
||||
float circle(vec2 uv, float radius)
|
||||
{
|
||||
vec2 relPos = uv - center;
|
||||
float distSq = relPos.x * relPos.x + relPos.y * relPos.y;
|
||||
return sqrt(distSq) <= size ? 1.0 : 0.0;
|
||||
radius *= 0.8;
|
||||
float distSq = uv.x * uv.x + uv.y * uv.y;
|
||||
float result = distSq > radius * radius;
|
||||
return 1.0 - result;
|
||||
}
|
||||
|
||||
float circles(vec2 uv, float level, float subLevel)
|
||||
{
|
||||
vec2 offsetUv = uv + (0.5 + level * 0.5);
|
||||
vec2 bigUv = (offsetUv % 1.0) - 0.5;
|
||||
float base = 0.0;
|
||||
if (subLevel > 0.25)
|
||||
{
|
||||
vec2 smallUv = (((offsetUv + 0.25) % 2.0) * 2.0) - 0.5;
|
||||
base += circle(smallUv, 0.5);
|
||||
}
|
||||
if (subLevel > 0.5)
|
||||
{
|
||||
vec2 smallUv = (((offsetUv - 0.75) % 2.0) * 2.0) - 0.5;
|
||||
base += circle(smallUv, 0.5);
|
||||
}
|
||||
if (subLevel > 0.75)
|
||||
{
|
||||
vec2 smallUv = (((offsetUv + 1.25) % 2.0) * 2.0) - 0.5;
|
||||
base += circle(smallUv, 0.5);
|
||||
}
|
||||
base += circle(bigUv, lerp(0.25, 0.5, 1.0 - subLevel));
|
||||
|
||||
return base;
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
// gl_FragColor = circle(v_uv0, vec2(0.5, 0.5), 1.0);
|
||||
float color = v_uv0.x < 0.5 && v_uv0.y < 0.5;
|
||||
gl_FragColor = vec4(color, color, color, 1.0);
|
||||
float2 dx = ddx(v_uv0);
|
||||
float2 dy = ddy(v_uv0);
|
||||
float2x2 mat = float2x2(dx, dy);
|
||||
float4 vectorized = float4(dx, dy);
|
||||
float qq = dot(vectorized, vectorized);
|
||||
float rr = determinant(mat);
|
||||
float discriminantSqr = max(0.0, qq*qq - 4.0*rr*rr);
|
||||
float discriminant = sqrt(discriminantSqr);
|
||||
float2 freq = sqrt(float2(qq + discriminant, qq - discriminant) / 2.0);
|
||||
|
||||
float spacing = freq.y * exp2(2.0);
|
||||
spacing *= 128.0; // TODO: check reference to see how to calculate this!
|
||||
float spacingLog = log2(spacing);
|
||||
int patternScaleLevel = floor(spacingLog);
|
||||
float patternFractional = spacingLog - patternScaleLevel;
|
||||
|
||||
vec2 uv = v_uv0 * exp2(patternScaleLevel);
|
||||
gl_FragColor = circles(uv, patternScaleLevel, patternFractional);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user