Shorty

Поделиться текстом

Простой сервис для сокращения URL и обмена текстом.

Ваш текст:

float sdBox(vec2 p, vec2 size)
{
vec2 q = abs(p) - size;
return length(max(q, 0.0))
+ min(max(q.x, q.y), 0.0);
}

float sdCircle(vec2 p, float r)
{
return length(p) - r;
}

float sdCar(vec2 p)
{
float d = sdBox(p, vec2(20.0, 30.0));

d = min(d, sdBox(p - vec2(-24.0, 21.0),
vec2(5.0, 9.0)));

d = min(d, sdBox(p - vec2(-24.0, -21.0),
vec2(5.0, 9.0)));

d = min(d, sdBox(p - vec2(24.0, 21.0),
vec2(5.0, 9.0)));

d = min(d, sdBox(p - vec2(24.0, -21.0),
vec2(5.0, 9.0)));

return d;
}

float sdBlinksOnRoad(vec2 p, float x)
{
float y = mod(p.y, 80.0) - 40.0;

return sdBox(
vec2(p.x - x, y),
vec2(3.0, 20.0)
);
}

float sdTree(vec2 p, float x)
{
float y = mod(p.y, 120.0) - 60.0;

vec2 treeP = vec2(p.x - x, y);

float d = sdBox(
treeP - vec2(0.0, -20.0),
vec2(3.0, 20.0)
);

d = min(d, sdCircle(treeP + vec2(0.0, 15.0), 15.0));
return d;
}

float sdRoad(vec2 p, float roadWight)
{
return abs(p.x) - (roadWight / 2.0);
}

float random(float x)
{
return fract(sin(x) * 963758.5453);
}

float objectY(float id)
{
float speed = 150.0;

float fallTime =
(iResolution.y + 80.0) / speed;

// Max пауза
float maxDelay = 1.0;

float period = fallTime + maxDelay;

float cycle = floor(iTime / period);

// Для каждого появления новая задержка
float delay = random(id + cycle) * maxDelay;

float time = mod(iTime, period);

if (time < delay)
return -100.0;

return iResolution.y + 20.0
- (time - delay) * speed;
}

float objectTree()
{
float speed = 150.0;

float fallTime =
(iResolution.y + 80.0) / speed;

float period = fallTime;

float cycle = floor(iTime / period);

float time = mod(iTime, period);

if (time < cycle)
return -100.0;

return iResolution.y + 20.0
- (time - cycle) * speed;
}

void mainImage(out vec4 fragColor, in vec2 fragCoord)
{
vec3 color = vec3(57.0 / 255.0, 255.0 / 225.0, 40.0 / 255.0);

vec2 roadPos =
fragCoord - vec2(iResolution.x / 2.0, 0.0);

if (sdRoad(roadPos, iResolution.x / 2.0) < 0.0)
color = vec3(
128.0 / 255.0,
128.0 / 255.0,
128.0 / 255.0
);

float roadWidth = iResolution.x / 2.0;

if (sdBlinksOnRoad(roadPos, -roadWidth / 6.0) < 0.0)
color = vec3(1.0);

if (sdBlinksOnRoad(roadPos, roadWidth / 6.0) < 0.0)
color = vec3(1.0);

float treeSpeed = 150.0;
vec2 movingTreePos = roadPos;
movingTreePos.y += iTime * treeSpeed;
if (sdTree(movingTreePos, roadWidth / 2.0 + 30.0) < 0.0)
color = vec3(1.0);

if (sdTree(movingTreePos, -roadWidth / 2.0 - 30.0) < 0.0)
color = vec3(1.0);

float carX =
texelFetch(iChannel0, ivec2(0, 0), 0).r;

vec2 carPos =
vec2(carX, 60.0);

if (sdCar(fragCoord - carPos) < 0.0)
color = vec3(
220.0 / 255.0,
20.0 / 255.0,
60.0 / 255.0
);

vec2 object1 =
vec2(iResolution.x * 0.35, objectY(1.0));

if (sdCircle(fragCoord - object1, 20.0) < 0.0)
color = vec3(0.0, 0.0, 1.0);

vec2 object2 =
vec2(iResolution.x * 0.65, objectY(2.0));

if (sdBox(fragCoord - object2,
vec2(20.0)) < 0.0)
color = vec3(1.0, 1.0, 0.0);

fragColor = vec4(color, 1.0);
}