# **Учебная практика 2022. Вторник 28.06** Мулярчук Владислава Сергеевна [TOC] # Отчет проделанной роботы: # Присутствовала на паре # Везде зарегестрировалась # *Задание №3* математической визуализацией Буратино ## Решение роботы На сайте shadertoy.com с помощью неявных функций в пиксельном шейдере. Написать функцию которая рисует круги и линии разных цветов для каждой части головы создавая Буратино. ## Cсылка на роботу https://www.shadertoy.com/view/Nd3BW8 ## Код к роботе ```glsl=1 bool circle(vec2 uv, vec2 center, float r) { return (uv.x + center.x) * (uv.x + center.x) + (uv.y + center.y) * (uv.y + center.y) < r*r; } bool lineOver(vec2 uv, vec3 line) //верхняя линия { return uv.y * line.y >= uv.x * line.x + line.z; } bool lineUnder(vec2 uv, vec3 line) //нижняя линия { return uv.y * line.y <= uv.x * line.x + line.z; } void mainImage(out vec4 fragColor, in vec2 fragCoord) { // Normalized pixel coordinates (from 0 to 1) vec2 uv =2.0*fragCoord/iResolution.xy-1.0 ; uv.x = uv.x*iResolution.x/iResolution.y; //задаем цвета vec4 red = vec4(1.0, 0.2, 0.4, 1.0); vec4 white = vec4(1.0, 1.0, 1.0, 1.0); vec4 black = vec4(0.0, 0.0, 0.0, 1.0); vec4 body = vec4(1.0, 0.8, 0.5, 1.0); vec4 pink = vec4(1.0, 0.4, 0.4, 0.5); vec4 blue = vec4(0.0, 0.1, 0.7, 0.0); vec4 fon = vec4(1.0, 1, 0.8, 1.0); //цвет фона fragColor = fon; //рисуем голову if(circle(uv, vec2(0.5, 0.1), 0.35)) fragColor = body; if(circle(uv, vec2(0.4, -0.005), 0.08)) fragColor = black; if(circle(uv, vec2(0.41, -0.04), 0.085)) fragColor = body; if(lineOver(uv, vec3(1.0, -14.0, 0.5)) && lineUnder(uv, vec3(-1.0, -14.0, 2.0)) && uv.x >= -0.17) //nose fragColor = body; if(circle(uv, vec2(0.31, 0.26), 0.080)) fragColor = black; if(circle(uv, vec2(0.31, 0.3), 0.083)) fragColor = body; if(circle(uv, vec2(0.45, 0.22), 0.11)) fragColor = pink; //шляпа if(uv.y >= 0.12 && uv.y <= 0.24 && uv.x >= -0.77 && uv.x <= -0.23) fragColor = red; if(circle(uv, vec2(0.23, -0.18), 0.06)) fragColor = red; if(circle(uv, vec2(0.77, -0.18), 0.06)) fragColor = red; if(uv.y >= 0.14 && uv.y <= 0.23 && uv.x >= -0.77 && uv.x <= -0.23) fragColor = red; if(circle(uv, vec2(0.23, -0.185), 0.045)) fragColor = red; if(circle(uv, vec2(0.77, -0.185), 0.045)) fragColor = red; if(lineOver(uv, vec3(-3.0, -1.0, -2.5)) && lineUnder(uv, vec3(-3.0, 1.0, -0.5)) && uv.y >= 0.24 && uv.y <= 0.9) fragColor = red; if(circle(uv, vec2(0.5, -0.87), 0.10)) fragColor = blue; //тело и шея if(uv.y >= -0.79 && uv.y <= -0.43 && uv.x >= -0.57 && uv.x <= -0.43) fragColor = body; if(circle(uv, vec2(0.47, 0.987), 0.445)) fragColor = red; if(circle(uv, vec2(0.1, 0.95), 0.05)) fragColor = white; if(circle(uv, vec2(0.15, 0.79), 0.05)) fragColor = white; if(circle(uv, vec2(0.25, 0.65), 0.05)) fragColor = white; } } ``` # *Задание №4* Mатематической визуализацией Имени и Фамилии ## Ссылка на роботу https://www.shadertoy.com/view/ssdBD8 ## Код ```glsl=1 void mainImage( out vec4 fragColor, in vec2 fragCoord ) { // Normalized pixel coordinates (from 0 to 1) vec2 uv = 2.0*vec2(fragCoord.xy - 0.5*iResolution.xy)/iResolution.y; fragColor = vec4(1.0,1.0,1.0,1.0); vec3 black = vec3(0.0,0.0,0.0); float x1; float y1; float r; //М x1= uv.x +1.7; y1 = uv.y + 0.1; if(abs(x1)<0.015 && abs(y1)<0.15){ fragColor = vec4(black,1.0); } x1 = uv.x + 1.68; y1 = uv.y - 0.0255; if(abs(x1)<0.03 && abs(y1)<0.02){ fragColor = vec4(black,1.0); } x1 = uv.x + 1.65; y1 = uv.y + 0.03; if(abs(x1)<0.02 && abs(y1)<0.04){ fragColor = vec4(black,1.0); } x1 = uv.x + 1.62; y1 = uv.y + 0.052; if(abs(x1)<0.025 && abs(y1)<0.02){ fragColor = vec4(black,1.0); } x1 = uv.x + 1.58; y1 = uv.y + 0.03; if(abs(x1)<0.02 && abs(y1)<0.04){ fragColor = vec4(black,1.0); } x1 = uv.x + 1.55; y1 = uv.y - 0.0255; if(abs(x1)<0.03 && abs(y1)<0.02){ fragColor = vec4(black,1.0); } x1 = uv.x + 1.52; y1 = uv.y +0.11; if(abs(x1)<0.015 && abs(y1)<0.15){ fragColor = vec4(black,1.0); } //У x1 = uv.x + 1.25; y1 = uv.y + 0.11; if(abs(x1)<0.015 && abs(y1)<0.15){ fragColor = vec4(black,1.0); } x1 = uv.x + 1.41; y1 = uv.y -0.01; if(abs(x1)<0.015 && abs(y1)<0.03){ fragColor = vec4(black,1.0); } x1 = uv.x + 1.39; y1 = uv.y + 0.02; if(abs(x1)<0.03 && abs(y1)<0.01){ fragColor = vec4(black,1.0); } x1 = uv.x + 1.35; y1 = uv.y + 0.04; if(abs(x1)<0.01 && abs(y1)<0.04){ fragColor = vec4(black,1.0); } x1 = uv.x + 1.32; y1 = uv.y +0.07; if(abs(x1)<0.04 && abs(y1)<0.01){ fragColor = vec4(black,1.0); } //Л x1 = uv.x + 0.99; y1 = uv.y +0.1; if(abs(x1)<0.01 && abs(y1)<0.15){ fragColor = vec4(black,1.0); } x1 = uv.x + 1.15; y1 = uv.y +0.2; if(abs(x1)<0.02 && abs(y1)<0.03){ fragColor = vec4(black,1.0); } x1 = uv.x + 1.12; y1 = uv.y +0.22; if(abs(x1)<0.02 && abs(y1)<0.01){ fragColor = vec4(black,1.0); } x1 = uv.x + 1.09; y1 = uv.y+0.08; if(abs(x1)<0.01 && abs(y1)<0.13){ fragColor = vec4(black,1.0); } x1 = uv.x + 1.05; y1 = uv.y-0.03; if(abs(x1)<0.04 && abs(y1)<0.02){ fragColor = vec4(black,1.0); } //Я x1 = uv.x + 0.92; y1 = uv.y + 0.03; if(abs(x1)<0.01 && abs(y1)<0.08){ fragColor = vec4(black,1.0); } x1 = uv.x + 0.84; y1 = uv.y -0.029; if(abs(x1)<0.06 && abs(y1)<0.01){ fragColor = vec4(black,1.0); } x1 = uv.x + 0.78; y1 = uv.y +0.1 ; if(abs(x1)<0.01 && abs(y1)<0.15){ fragColor = vec4(black,1.0); } x1 = uv.x + 0.85; y1 = uv.y + 0.08; if(abs(x1)<0.06 && abs(y1)<0.01){ fragColor = vec4(black,1.0); } x1 = uv.x + 0.83; y1 = uv.y + 0.13; if(abs(x1)<0.01 && abs(y1)<0.03){ fragColor = vec4(black,1.0); } x1 = uv.x + 0.86; y1 = uv.y + 0.18; if(abs(x1)<0.04 && abs(y1)<0.02){ fragColor = vec4(black,1.0); } x1 = uv.x + 0.9; y1 = uv.y +0.2; if(abs(x1)<0.01 && abs(y1)<0.03){ fragColor = vec4(black,1.0); } //Р x1 = uv.x + 0.66; y1 = uv.y +0.08; if(abs(x1)<0.01 && abs(y1)<0.15){ fragColor = vec4(black,1.0); } x1 = uv.x + 0.6; y1 = uv.y -0.06; if(abs(x1)<0.09 && abs(y1)<0.01){ fragColor = vec4(black,1.0); } x1 = uv.x + 0.52; y1 = uv.y +0.01; if(abs(x1)<0.01 && abs(y1)<0.06){ fragColor = vec4(black,1.0); } x1 = uv.x + 0.58; y1 = uv.y +0.08; if(abs(x1)<0.09 && abs(y1)<0.01){ fragColor = vec4(black,1.0); } //Ч x1 = uv.x + 0.42; y1 = uv.y + 0.001; if(abs(x1)<0.01 && abs(y1)<0.08){ fragColor = vec4(black,1.0); } x1 = uv.x + 0.35; y1 = uv.y+ 0.06; if(abs(x1)<0.05 && abs(y1)<0.01){ fragColor = vec4(black,1.0); } x1 = uv.x + 0.28; y1 = uv.y + 0.08; if(abs(x1)<0.01 && abs(y1)<0.17){ fragColor = vec4(black,1.0); } //у x1 = uv.x + 0.05; y1 = uv.y + 0.06; if(abs(x1)<0.015 && abs(y1)<0.17){ fragColor = vec4(black,1.0); } x1 = uv.x + 0.2; y1 = uv.y -0.065; if(abs(x1)<0.01 && abs(y1)<0.05){ fragColor = vec4(black,1.0); } x1 = uv.x + 0.15; y1 = uv.y -0.03; if(abs(x1)<0.04 && abs(y1)<0.01){ fragColor = vec4(black,1.0); } x1 = uv.x + 0.12; y1 = uv.y + 0.02; if(abs(x1)<0.01 && abs(y1)<0.04){ fragColor = vec4(black,1.0); } x1 = uv.x + 0.08; y1 = uv.y +0.07; if(abs(x1)<0.04 && abs(y1)<0.01){ fragColor = vec4(black,1.0); } //К x1 = uv.x - 0.05; y1 = uv.y + 0.06; if(abs(x1)<0.01 && abs(y1)<0.17){ fragColor = vec4(black,1.0); } x1 = uv.x - 0.20; y1 = uv.y - 0.061; if(abs(x1)<0.02 && abs(y1)<0.04){ fragColor = vec4(black,1.0); } x1 = uv.x - 0.17; y1 = uv.y - 0.02; if(abs(x1)<0.03 && abs(y1)<0.01){ fragColor = vec4(black,1.0); } x1 = uv.x - 0.15; y1 = uv.y - 0.0050; if(abs(x1)<0.01 && abs(y1)<0.04){ fragColor = vec4(black,1.0); } x1 = uv.x - 0.12; y1 = uv.y +0.059; if(abs(x1)<0.05 && abs(y1)<0.02){ fragColor = vec4(black,1.0); } x1 = uv.x-0.15; y1 = uv.y+0.08 ; if(abs(x1)<0.02 && abs(y1)<0.04){ fragColor = vec4(black,1.0); } x1 = uv.x - 0.17; y1 = uv.y + 0.13; if(abs(x1)<0.04 && abs(y1)<0.01){ fragColor = vec4(black,1.0); } x1 = uv.x - 0.2; y1 = uv.y + 0.17; if(abs(x1)<0.01 && abs(y1)<0.06){ fragColor = vec4(black,1.0); } //В x1 = uv.x + 1.1; y1 = uv.y + 0.7; if(abs(x1)<0.01 && abs(y1)<0.17){ fragColor = vec4(black,1.0); } x1 = uv.x + 1.0; y1 = uv.y + 0.53; if(abs(x1)<0.07 && abs(y1)<0.01){ fragColor = vec4(black,1.0); } x1 = uv.x +0.92; y1 = uv.y + 0.8; if(abs(x1)<0.01 && abs(y1)<0.06){ fragColor = vec4(black,1.0); } x1 = uv.x +0.92; y1 = uv.y + 0.6; if(abs(x1)<0.01 && abs(y1)<0.06){ fragColor = vec4(black,1.0); } x1 = uv.x +1.0; y1 = uv.y + 0.67; if(abs(x1)<0.07 && abs(y1)<0.01){ fragColor = vec4(black,1.0); } x1 = uv.x +1.0; y1 = uv.y + 0.75; if(abs(x1)<0.07 && abs(y1)<0.01){ fragColor = vec4(black,1.0); } x1 = uv.x +1.0; y1 = uv.y + 0.87; if(abs(x1)<0.07 && abs(y1)<0.01){ fragColor = vec4(black,1.0); } //Л x1 = uv.x + 0.750; y1 = uv.y +0.7; if(abs(x1)<0.01 && abs(y1)<0.15){ fragColor = vec4(black,1.0); } x1 = uv.x + 0.89; y1 = uv.y +0.84; if(abs(x1)<0.02 && abs(y1)<0.01){ fragColor = vec4(black,1.0); } x1 = uv.x + 0.87; y1 = uv.y+0.7; if(abs(x1)<0.01 && abs(y1)<0.13){ fragColor = vec4(black,1.0); } x1 = uv.x + 0.79; y1 = uv.y+0.55;; if(abs(x1)<0.05 && abs(y1)<0.02){ fragColor = vec4(black,1.0); } //А x1 = uv.x +0.62; y1 = uv.y + 0.70; if(abs(x1)<0.01 && abs(y1)<0.17){ fragColor = vec4(black,1.0); } x1 = uv.x + 0.48; y1 = uv.y + 0.7; if(abs(x1)<0.01 && abs(y1)<0.17){ fragColor = vec4(black,1.0); } x1 = uv.x +0.54; y1 = uv.y + 0.54; if(abs(x1)<0.06 && abs(y1)<0.01){ fragColor = vec4(black,1.0); } x1 = uv.x + 0.56; y1 = uv.y + 0.68; if(abs(x1)<0.06 && abs(y1)<0.01){ fragColor = vec4(black,1.0); } //Д x1 = uv.x +0.3; y1 = uv.y + 0.60; if(abs(x1)<0.01 && abs(y1)<0.08){ fragColor = vec4(black,1.0); } x1 = uv.x + 0.18; y1 = uv.y + 0.6; if(abs(x1)<0.01 && abs(y1)<0.08){ fragColor = vec4(black,1.0); } x1 = uv.x +0.25; y1 = uv.y + 0.54; if(abs(x1)<0.06 && abs(y1)<0.01){ fragColor = vec4(black,1.0); } x1 = uv.x + 0.25; y1 = uv.y + 0.68; if(abs(x1)<0.12 && abs(y1)<0.01){ fragColor = vec4(black,1.0); } x1 = uv.x +0.36; y1 = uv.y + 0.750; if(abs(x1)<0.01 && abs(y1)<0.08){ fragColor = vec4(black,1.0); } x1 = uv.x + 0.12; y1 = uv.y + 0.75; if(abs(x1)<0.01 && abs(y1)<0.08){ fragColor = vec4(black,1.0); } //А x1 = uv.x +0.05; y1 = uv.y + 0.70; if(abs(x1)<0.01 && abs(y1)<0.17){ fragColor = vec4(black,1.0); } x1 = uv.x - 0.08; y1 = uv.y + 0.7; if(abs(x1)<0.01 && abs(y1)<0.17){ fragColor = vec4(black,1.0); } x1 = uv.x -0.02; y1 = uv.y + 0.54; if(abs(x1)<0.06 && abs(y1)<0.01){ fragColor = vec4(black,1.0); } x1 = uv.x -0.02; y1 = uv.y + 0.68; if(abs(x1)<0.06 && abs(y1)<0.01){ fragColor = vec4(black,1.0); } } ``` # Задание№5 математической визуализацией Автопортрета в профиль (автопортрет должен быть узнаваем - будет сравниваться с Вашим фото) ## Решение С помощью сайт https://open-graphics-service.glitch.me/ сгенерировала точки для автопортрета в профиль.Задание в процесе выполнения