# Учебная практика 2022. Вторник 28.06. Емец Никита. [TOC] Присутствовал на конференции в Zoom. ## Выполнил задания: ### 1.2 В данном задании надо создать математическую визуализациию Лошарика на сайте shadertoy.com с помощью неявных функций. Оператор mod является оператором деления по модулю. Он возвращает остаток от деления 1-го операнда на 2-й. #### Решение ``` glsl=1 float circle(vec2 uv, vec2 p, float r) { float l = length(uv-p); float c = smoothstep(r, r-0.001, l); return c; } void mainImage(out vec4 fragColor, in vec2 fragCoord) { vec2 uv = fragCoord.xy/iResolution.xy; uv.x *= iResolution.x/iResolution.y; uv -= .5; uv.x = uv.x+mod(1.*iTime,4.0)-2.0; //голова float c1 = circle(uv, vec2(-.07, .36), .1); float c2 = circle(uv, vec2(-.01, .44), .05); float c3 = circle(uv, vec2(.04, .36), .05); float c4 = circle(uv, vec2(-.17, .36), .03); //шея float c5 = circle(uv, vec2(-.07, .2), .06); float c6 = circle(uv, vec2(.001, .1), .06); //body float c7 = circle(uv, vec2(.09, -.01), .08); float c8 = circle(uv, vec2(.25, -.01), .08); float c9 = circle(uv, vec2(.408, -.01), .08); //лапы float c10 = circle(uv, vec2(.02, -.13), .06); float c11 = circle(uv, vec2(-.05, -.228), .06); float c12 = circle(uv, vec2(-.07, -.345), .06); float c13 = circle(uv, vec2(.5, -.11), .06); float c14 = circle(uv, vec2(.57, -.2), .06); float c15 = circle(uv, vec2(.64, -.3), .06); //хвост float c16 = circle(uv, vec2(.47, .05), .03); float c17 = circle(uv, vec2(.5, .1), .03); float c18 = circle(uv, vec2(.53, .15), .03); float c19 = circle(uv, vec2(.57, .22), .05); //глаз float c20 = circle(uv, vec2(-.11, .4), .03); float c21 = circle(uv, vec2(-.116, .4), .02); fragColor = vec4(1., 1., .0, 1.0)*c1 // yellow + vec4(.0, .0, 1.0, .0)*c2 // blue + vec4(1.0, .0, .0, 1.0)*c3 //red + vec4(1.0, .0, .0, 1.0)*c4 + vec4(.0, .0, 1.0, .0)*c5 + vec4(.5, 1.0, .0, .0)*c6 + vec4(.0, .0, 1.0, .0)*c7 + vec4(1.0, .0, .0, 1.0)*c8 + vec4(1.0, .5, .0, .0)*c9 + vec4(.0, .0, 1.0, .0)*c10 + vec4(.0, 1.0, .5, .0)*c11 + vec4(.0, 1.0, .5, .0)*c12 + vec4(.0, .0, 1.0, .0)*c13 + vec4(.0, .0, 1.0, .0)*c14 + vec4(1.0, .0, .0, 1.0)*c15 + vec4(.5, .0, 1.0, 1.0)*c16 + vec4(1.0, .0, 1.0, .0)*c17 + vec4(1.0, .0, .0, 1.0)*c18 + vec4(.0, .0, 1.0, .0)*c19; if (c20!=0.0){ fragColor = vec4(1.0, 1.0, 1.0, 1.0); } if (c21!=0.0){ fragColor = vec4(0.0, 0.0, 0.0, 1.0); } } ``` Ссылка на shadertoy: https://www.shadertoy.com/view/fdcBDH ![](https://i.imgur.com/WHmwVAk.png) ### 1.3 В данном задании надо создать математическую визуализациию Буратино на сайте shadertoy.com с помощью неявных функций. #### Решение Функция для создания круга с использованием неявной функции: ``` glsl=1 float circle(vec2 uv, vec2 p, float r) { float l = length(uv-p); float c = smoothstep(r, r-0.001, l); return c; } ``` Функция для проверки лежит ли точка над прямой или под прямой: ```glsl=1 bool over(vec2 uv, vec3 line) { return uv.y * line.y >= uv.x * line.x + line.z; } bool under(vec2 uv, vec3 line) { return uv.y * line.y <= uv.x * line.x + line.z; } ``` Рисуем фигуры: ```glsl=1 //голова if(circle(uv, vec2(-0.5, -0.1), 0.2)!=0.0) fragColor = beige; if(circle(uv, vec2(-0.46, -0.16), 0.05)!=0.0) fragColor = pink; if(circle(uv, vec2(-0.35, -0.16), 0.04)!=0.0) fragColor = black; if(circle(uv, vec2(-0.35, -0.15), 0.04)!=0.0) fragColor = beige; if(circle(uv, vec2(-0.4, -0.03), 0.04)!=0.0) fragColor = black; if(circle(uv, vec2(-0.4, -0.02), 0.04)!=0.0) fragColor = beige; ..... ``` Ссылка на shadertoy: https://www.shadertoy.com/view/7dcBDH ![](https://i.imgur.com/lTo6LiE.png) ### 1.4 В данном задании надо создать математическую визуализациию своего имени и фамилии на сайте shadertoy.com с помощью неявных функций. #### Решение Функция для проверки лежит ли точка над прямой или под прямой: ```glsl=1 bool over(vec2 uv, vec3 line) { return uv.y * line.y >= uv.x * line.x + line.z; } bool under(vec2 uv, vec3 line) { return uv.y * line.y <= uv.x * line.x + line.z; } ``` Рисуем фигуры: ```glsl=1 //E if(uv.y >= 0.4 && uv.y <= 0.42 && uv.x >= -0.75 && uv.x <= -0.7) fragColor = black; if(uv.y >= 0.2 && uv.y <= 0.4 && uv.x >= -0.75 && uv.x <= -0.73) fragColor = black; if(uv.y >= 0.3 && uv.y <= 0.32 && uv.x >= -0.75 && uv.x <= -0.7) fragColor = black; if(uv.y >= 0.2 && uv.y <= 0.22 && uv.x >= -0.75 && uv.x <= -0.7) fragColor = black; //M if(uv.y >= 0.2 && uv.y <= 0.42 && uv.x >= -0.65 && uv.x <= -0.63) fragColor = black; if(uv.y >= 0.2 && uv.y <= 0.42 && uv.x >= -0.65 && uv.x <= -0.63) fragColor = black; if(over(uv, vec3(-1.8, .7, -0.88)) && under(uv, vec3(-1.8, .7, -0.84)) && uv.y >= 0.2 && uv.y <= 0.42) fragColor = black; if(over(uv, vec3(1.8, .7, 1.1)) && under(uv, vec3(1.8, .7, 1.14)) && uv.y >= 0.2 && uv.y <= 0.42) fragColor = black; if(uv.y >= 0.2 && uv.y <= 0.42 && uv.x >= -0.46 && uv.x <= -0.44) fragColor = black; //E if(uv.y >= 0.4 && uv.y <= 0.42 && uv.x >= -0.39 && uv.x <= -0.34) fragColor = black; if(uv.y >= 0.2 && uv.y <= 0.4 && uv.x >= -0.39 && uv.x <= -0.37) fragColor = black; if(uv.y >= 0.3 && uv.y <= 0.32 && uv.x >= -0.39 && uv.x <= -0.34) fragColor = black; if(uv.y >= 0.2 && uv.y <= 0.22 && uv.x >= -0.39 && uv.x <= -0.34) fragColor = black; //Ц if(uv.y >= 0.2 && uv.y <= 0.42 && uv.x >= -0.29 && uv.x <= -0.27) fragColor = black; if(uv.y >= 0.2 && uv.y <= 0.42 && uv.x >= -0.24 && uv.x <= -0.22) fragColor = black; if(uv.y >= 0.2 && uv.y <= 0.22 && uv.x >= -0.29 && uv.x <= -0.18) fragColor = black; if(uv.y >= 0.16 && uv.y <= 0.22 && uv.x >= -0.2 && uv.x <= -0.18) fragColor = black; //H if(uv.y >= 0.2 && uv.y <= 0.42 && uv.x >= -0.05 && uv.x <= -0.03) fragColor = black; if(uv.y >= 0.2 && uv.y <= 0.42 && uv.x >= 0.05 && uv.x <= 0.07) fragColor = black; if(uv.y >= 0.3 && uv.y <= 0.32 && uv.x >= -0.05 && uv.x <= 0.07) fragColor = black; //И if(uv.y >= 0.2 && uv.y <= 0.42 && uv.x >= 0.1 && uv.x <= 0.12) fragColor = black; if(over(uv, vec3(1.8, .7, -0.09)) && under(uv, vec3(1.8, .7, -0.05)) && uv.y >= 0.2 && uv.y <= 0.42) fragColor = black; if(uv.y >= 0.2 && uv.y <= 0.42 && uv.x >= 0.19 && uv.x <= 0.21) fragColor = black; //K if(uv.y >= 0.2 && uv.y <= 0.42 && uv.x >= 0.24 && uv.x <= 0.26) fragColor = black; if(over(uv, vec3(1.8, .7, -0.29)) && under(uv, vec3(1.8, .7, -0.25)) && uv.y >= 0.3 && uv.y <= 0.42) fragColor = black; if(over(uv, vec3(1.8, -.7, -0.71)) && under(uv, vec3(1.8, -.7, -0.67)) && uv.y >= 0.2 && uv.y <= 0.3) fragColor = black; //И if(uv.y >= 0.2 && uv.y <= 0.42 && uv.x >= 0.34 && uv.x <= 0.36) fragColor = black; if(over(uv, vec3(1.8, .7, -0.53)) && under(uv, vec3(1.8, .7, -0.49)) && uv.y >= 0.2 && uv.y <= 0.42) fragColor = black; if(uv.y >= 0.2 && uv.y <= 0.42 && uv.x >= 0.44 && uv.x <= 0.46) fragColor = black; //T if(uv.y >= 0.2 && uv.y <= 0.42 && uv.x >= 0.55 && uv.x <= 0.57) fragColor = black; if(uv.y >= 0.4 && uv.y <= 0.42 && uv.x >= 0.49 && uv.x <= 0.63) fragColor = black; //A if(over(uv, vec3(1.8, .7, -1.05)) && under(uv, vec3(1.8, .7, -1.)) && uv.y >= 0.2 && uv.y <= 0.42) fragColor = black; if(over(uv, vec3(-1.8, .7, 1.63)) && under(uv, vec3(-1.8, .7, 1.68)) && uv.y >= 0.2 && uv.y <= 0.42) fragColor = black; if(uv.y >= 0.3 && uv.y <= 0.32 && uv.x >= 0.7 && uv.x <= 0.8) fragColor = black; ``` Результат по ссылке: https://www.shadertoy.com/view/NdtBD8 ![](https://i.imgur.com/v4AWyMC.png)