# Учебная практика 2022. Отчет за 28.06.2022. Лазаренко Дарья Геннадьевна. Первая группа. [TOC] ## Задание 3 Cсылки на сайт shadertoy.com c реализованной Вами с помощью неявных функций в пиксельном шейдере (адаптированный вариант использования языка GLSL) - математическая реализация Буратино(пока с условными операторами if). ### Решение Задание было выполнено. Решение доступно по [ссылке](https://www.shadertoy.com/view/7dtBD8). Код решения: ```glsl=1 bool circle(vec2 p, vec2 o, float r) { float scaleY = iResolution.y / iResolution.x; return (p.x - o.x) * (p.x - o.x) + (p.y - o.y) * (p.y - o.y) * (scaleY * scaleY) < r*r; } bool triangle(vec2 v, vec2 a,float s,float g) { float x = v.x - a.x, y = v.y - a.y; if (y>x*s && y>x*(-s) && y<g) { return true; } else return false; } void mainImage( out vec4 fragColor, in vec2 fragCoord ) { // Normalized pixel coordinates (from 0 to 1) vec2 uv = fragCoord/iResolution.xy; float x = uv.x; float y = uv.y; vec2 uv_ = 1.0-2.0*fragCoord/iResolution.xy; float x_ = uv_.x; float y_ = uv_.y; fragColor = vec4(0.8, 0.8, 0.8, 1.0); //head if (circle(vec2(x, y), vec2(0.4, 0.625), 0.09)) fragColor = vec4(0.9, 0.9, 0.7, 1.0); if (circle(vec2(x, y), vec2(0.37, 0.55), 0.02)) fragColor = vec4(1, 0.3, 0.3, 1.0); if (circle(vec2(x, y), vec2(0.43, 0.65), 0.015)) fragColor = vec4(0, 0, 0, 1.0); if (circle(vec2(x, y), vec2(0.428, 0.659), 0.015)) fragColor = vec4(0.9, 0.9, 0.7, 1.0); if (circle(vec2(x, y), vec2(0.442, 0.5), 0.01)) fragColor = vec4(0, 0, 0, 1.0); if (circle(vec2(x, y), vec2(0.4445, 0.505), 0.0105)) fragColor = vec4(0.9, 0.9, 0.7, 1.0); if (((y_+0.2)<(x_+0.2)/10.0)&&((y_+0.2)>(x_+0.2)/(-10.0))&&((x_+0.2)<0.3)) { //nose fragColor = vec4(0.9, 0.9, 0.7, 1.0); } //hat if (circle(vec2(x, y), vec2(0.4, 0.97), 0.015)) fragColor = vec4(0.7, 0, 0, 1.0); if(triangle(vec2(0.4, 0.99), uv, 5.0, 0.25)) fragColor = vec4(0.7, 0, 0, 1); if (circle(vec2(x, y), vec2(0.445, 0.765), 0.015)) fragColor = vec4(0.7, 0, 0, 1.0); if (circle(vec2(x, y), vec2(0.44, 0.765), 0.015)) fragColor = vec4(0.7, 0, 0, 1.0); if (circle(vec2(x, y), vec2(0.35, 0.765), 0.015)) fragColor = vec4(0.7, 0, 0, 1.0); if (circle(vec2(x, y), vec2(0.355, 0.765), 0.015)) fragColor = vec4(0.7, 0, 0, 1.0); // body if ((abs(x_-0.2)<0.043)&&(abs(y_-0.1)<0.1)) //neck fragColor = vec4(0.9, 0.9, 0.7, 1.0); if ((x_-0.2)*(x_-0.2)*9.0+(y_-1.0)*(y_-1.0) < 0.8 * 0.8) //main body fragColor = vec4(0.7, 0, 0, 1.0); if (circle(vec2(x, y), vec2(0.48, 0.25), 0.02)) fragColor = vec4(1, 1, 1, 1.0); if (circle(vec2(x, y), vec2(0.5, 0.15), 0.02)) fragColor = vec4(1, 1, 1, 1.0); if ((abs(x_-0.2)<0.05)&&(abs(y_-0.75)<0.25)) //arm fragColor = vec4(0.9, 0, 0, 1.0); if (circle(vec2(x, y), vec2(0.4, 0.24), 0.025)) fragColor = vec4(0.9, 0, 0, 1.0); } ``` Изображение, которое будет показано при компиляции: ![](https://i.imgur.com/pbBDNUA.jpg) ## Дополнительно Исправлена HTML-страница из Задания 1, доступна по [ссылке](https://replit.com/@DariaLazarenko1/practice-task-1#index.html). Изменения: я добавила ссылки на математические реализации Буратино и Лошарика в shadertoy.com, а также изображения с результатом работы программы.