рд╣рдо рд╕рд╛рдЗрдЯ рдХреЛ рд╕рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реЗрдбреЛ рдореЗрдВ рд╡реЛрд░реЛрдиреЛрдИ рдХреЗ рдореЛрдЬрд╝реЗрдХ, рдкрд┐рдХреНрд╕реЗрд▓реЗрд╢рди рдФрд░ рдЬреНрдпрд╛рдорд┐рддреАрдп рдорд╛рд╕реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ

рдЫрд╡рд┐

рдпрд╣ рдЖрд▓реЗрдЦ рд▓реЗрдЖрдЙрдЯ рдбрд┐рдЬрд╛рдЗрдирд░реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╢реЗрдбреНрд╕ рдХреА рд╢реБрд░реВрдЖрдд рдХрд╛ рдПрдХ рддрд╛рд░реНрдХрд┐рдХ рдирд┐рд░рдВрддрд░рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ, рд╣рдордиреЗ рд╢реЗрдбрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝реЛрдЯреЛ рдХреЗ рд╕рд╛рде рд╡рд┐рднрд┐рдиреНрди рджреЛ-рдЖрдпрд╛рдореА рдкреНрд░рднрд╛рд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреЗрдореНрдкрд▓реЗрдЯ рдмрдирд╛рдпрд╛ рдФрд░ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рджреЗрдЦрд╛ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдХреБрдЫ рдФрд░ рдмрдирд╛рд╡рдЯ рдЬреЛрдбрд╝реЗрдВрдЧреЗ, рдЙрдирдореЗрдВ рд╕реЗ рдореЛрдЬрд╝рд╛рдЗрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реЛрд░реЛрдиреЛрдИ рдмрдВрдЯрд╡рд╛рд░реЗ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рдЫрд╛рдпрд╛ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдорд╛рд╕реНрдХ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВ, рдкрд┐рдХреНрд╕реЗрд▓реЗрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдФрд░ рдкреНрд░рд╛рдЪреАрди GLSLAXax рдХреА рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдкрд░ рднреА рдмрд╛рдд рдХрд░реЗрдВ рдЬреЛ рдЕрднреА рднреА рд╣рдорд╛рд░реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВред


рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдХреА рддрд░рд╣, рдПрдХ рд╕рд╛рдВрд╕рд╛рд░рд┐рдХ рднрд╛рд╖рд╛ рдореЗрдВ рдиреНрдпреВрдирддрдо рд╕рд┐рджреНрдзрд╛рдВрдд рдФрд░ рдЕрдзрд┐рдХрддрдо рдЕрднреНрдпрд╛рд╕ рдФрд░ рддрд░реНрдХ рд╣реЛрдЧрд╛ред рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣рд╛рдВ рдпреБрдХреНрддрд┐рдпреЛрдВ рдФрд░ рдЙрдкрдпреЛрдЧреА рдиреЛрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдХреНрд░рдо рдорд┐рд▓реЗрдЧрд╛, рдФрд░ рдЕрдиреБрднрд╡реА рдлреНрд░рдВрдЯ-рдПрдВрдб рд╡рд┐рдХреНрд░реЗрддрд╛рдУрдВ рдХреЛ рдкреНрд░реЗрд░рдгрд╛ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВред


рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдПрдХ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╕рд╛рдЗрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рд╡реЗрдмрдЬреАрдПрд▓ рдкреНрд░рднрд╛рд╡реЛрдВ рдХрд╛ рд╡рд┐рд╖рдп рди рдХреЗрд╡рд▓ рдЯрд╛рдЗрдкрд╕реЗрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП, рдмрд▓реНрдХрд┐ рд╣рдорд╛рд░реЗ рд╕рд╣рдпреЛрдЧрд┐рдпреЛрдВ рд╕реЗ рдЕрдиреНрдп рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдХреЗ рд▓рд┐рдП рднреА рд░реБрдЪрд┐ рдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдирд╡реАрдирддрдо рдИрдПрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЙрдиреНрд╣реЗрдВ рдШрдмрд░рд╛рд╣рдЯ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЬрд╛рдирдмреВрдЭрдХрд░ рдЦреБрдж рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдкрд╛рд░рдВрдкрд░рд┐рдХ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдирд┐рд░реНрдорд╛рдгреЛрдВ рддрдХ рд╕реАрдорд┐рдд рд░рдЦрддреЗ рд╣реИрдВ рдЬреЛ рд╣рд░ рдХреЛрдИ рд╕рдордЭрддрд╛ рд╣реИред рдФрд░ рдлрд┐рд░ рд╕реЗ рдореИрдВ рдкрд╛рдардХреЛрдВ рдХрд╛ рдзреНрдпрд╛рди рдЗрд╕ рддрдереНрдп рдХреА рдУрд░ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдХреЛрдбрдкреЗрди рдХреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдВрдкрд╛рджрдХ рдЙрди рдкрд░ рдХрд┐рдП рдЧрдП рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред


рд▓реЗрдХрд┐рди рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ ...


рд╢реЗрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ


рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХреЛ рдирд╣реАрдВ рдкрдврд╝рд╛ рд╣реИ, рд╣рдордиреЗ рд╢реЗрдбрд░реНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЦрд╛рдХрд╛ рдмрдирд╛рдпрд╛ рд╣реИ:



рдЗрд╕рдореЗрдВ рдПрдХ рд╡рд┐рдорд╛рди рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рд╡рд░реНрдЧ) рдЬрд┐рд╕ рдкрд░ рдЪрд┐рддреНрд░-рдмрдирд╛рд╡рдЯ "рдЦреАрдВрдЪреА рдЧрдИ" рд╣реИред рдХреЛрдИ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд╢реАрд░реНрд╖ рд╢реЗрдЦрд░ рд╣реИред рдлрд┐рд░ рд╣рдордиреЗ рдЗрд╕ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЕрдм рд╣рдо рдЙрд╕ рдХреНрд╖рдг рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗ рдЬрдм рдЕрднреА рддрдХ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд╢реЗрдк рдореЗрдВ рдХреЛрдИ рддрд░реНрдХ рдирд╣реАрдВ рд╣реИред


рдореМрдЬрд╝реЗрдХ


рдореЛрдЬрд╝реЗрдХ рдПрдХ рд╡рд┐рдорд╛рди рд╣реИ рдЬрд┐рд╕реЗ рдЫреЛрдЯреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рддреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд░рдВрдЧ рд╕реЗ рднрд░рд╛ рд╣реЛрддрд╛ рд╣реИ рдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реИ, рдмрдирд╛рд╡рдЯред рд╣рдо рдЕрдкрдиреЗ рд╡рд┐рдорд╛рди рдХреЛ рднреА рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рдХреИрд╕реЗ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ? рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЖрдк рдЗрд╕реЗ рдЖрдпрддреЛрдВ рдореЗрдВ рддреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдПрд╕рд╡реАрдЬреА рдХреА рдорджрдж рд╕реЗ рдРрд╕рд╛ рдХрд░рдирд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрддрдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдЗрд╕ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рд╡реЗрдмрдЬреАрдПрд▓ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдиреАрд▓реЗ рд░рдВрдЧ рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдкрдиреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рд╕рдм рдХреБрдЫ рдбрд╛рд▓ рджрд┐рдпрд╛ред


рдореЛрдЬрд╝реЗрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЯреБрдХрдбрд╝реЗ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рдЖрдХрд╛рд░ рдФрд░ рдЖрдХрд╛рд░ рджреЛрдиреЛрдВ рдореЗрдВред рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡рд┐рднрд╛рдЬрди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╣реА рдордиреЛрд░рдВрдЬрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИред рдЗрд╕реЗ рд╡реЛрд░реЛрдиреЛрдИ рдХреЗ рдореЛрдЬрд╝реЗрдХ рдпрд╛ рдбрд┐рд░рд┐рдХреНрд▓реЗрдЯ рдХреЗ рд╡рд┐рднрд╛рдЬрди рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдкрд░ рд▓рд┐рдЦрд╛ рд╣реИ рдХрд┐ рдбреЗрд╕рдХрд╛рд░реНрдЯреЗрд╕ рдиреЗ XVII рд╕рджреА рдореЗрдВ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ред рд╡рд┐рдЪрд╛рд░ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реИ:


  • рд╡рд┐рдорд╛рди рдкрд░ рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд▓реЗрдВред
  • рд╡рд┐рдорд╛рди рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд╕реЗрдЯ рд╕реЗ рдЙрд╕рдХреЗ рдирд┐рдХрдЯрддрдо рдмрд┐рдВрджреБ рдХреЛ рдвреВрдВрдвреЗрдВред
  • рдмрд╕ рдЗрддрдирд╛ рд╣реАред рд╡рд┐рдорд╛рди рдХреЛ рдмрд╣реБрднреБрдЬ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рд╕реЗрдЯ рдореЗрдВ рдПрдХ рдмрд┐рдВрджреБ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджрд┐рдЦрд╛рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдЗрд╕ рд╡рд┐рднрд╛рдЬрди рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдорд╛рдереЗ рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░реЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рдорд╛рди рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдХреЗрд╡рд▓ shader рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рд╣реИред рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдХреЛрдб рдХреЛ рд▓реЛрдб рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рдЪрд░ рдмрдирд╛рдПрдВрдЧреЗред


function createPoints() { for (let i = 0; i < NUMBER_OF_POINTS; i++) { POINTS.push([Math.random(), Math.random()]); } } 

рдЕрдм рд╣рдореЗрдВ рдЙрдиреНрд╣реЗрдВ shaders рдХреЛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдбреЗрдЯрд╛ рд╡реИрд╢реНрд╡рд┐рдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо uniform рд╕рдВрд╢реЛрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рдПрдХ рд╕реВрдХреНрд╖реНрдо рдмрд┐рдВрджреБ рд╣реИ: рд╣рдо рд╕рд┐рд░реНрдл рдПрдХ рд╕рд░рдгреА рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ 21 рд╡реАрдВ рд╕рджреА рдпрд╛рд░реНрдб рдореЗрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХреБрдЫ рднреА рдирд╣реАрдВ рдЖрдПрдЧрд╛ред рдирддреАрдЬрддрди, рдЖрдкрдХреЛ рдПрдХ рд╕рдордп рдореЗрдВ рдПрдХ рдЕрдВрдХ рдХреЗ рдПрдХ рд╕рд░рдгреА рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред


 for (let i = 0; i < NUMBER_OF_POINTS; i++) { GL.uniform2fv(GL.getUniformLocation(PROGRAM, 'u_points[' + i + ']'), POINTS[i]); } 

рдЖрдЬ, рд╣рдо рдЕрдХреНрд╕рд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ, рдХреЗ рдмреАрдЪ рдЕрд╕рдВрдЧрддрд┐ рдХреА рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░реЗрдВрдЧреЗред рдЖрдорддреМрд░ рдкрд░ WebGL рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓реНрд╕ THREE.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдХреБрдЫ рдЧрдВрджрдЧреА рдЫрд┐рдкрд╛рддреА рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдПрдХ рдмрд╛рд░ jQuery рдиреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЗ рдорд╕реНрддрд┐рд╖реНрдХ рдХреЛ рдиреБрдХрд╕рд╛рди рдкрд╣реБрдВрдЪрд╛рддрд╛ рд╣реИред


рдЯреБрдХрдбрд╝рд╛ shader рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдВрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рдгреА рдЪрд░ рд╣реИред рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд▓рдВрдмрд╛рдИ рдХреЗ рдПрд░реЗрдЬрд╝ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЪрд▓реЛ 10 рдЕрдВрдХреЛрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:


 #define NUMBER_OF_POINTS 10 uniform vec2 u_points[NUMBER_OF_POINTS]; 

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рд╕рдм рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рд╣рд▓рдХреЛрдВ рдХреЛ рдЦреАрдВрдЪрдХрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рджреМрд░рд╛рди рдЕрдХреНрд╕рд░ рд╡рд┐рднрд┐рдиреНрди рдЬреНрдпрд╛рдорд┐рддреАрдп рдкреНрд░рд╛рдЗрдорд┐рдЯрд┐рд╡реНрд╕ рдХреА рдРрд╕реА рдбреНрд░рд╛рдЗрдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╡реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рддреБрд░рдВрдд рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╕реНрдерд┐рдд рд╣реИ рдФрд░ рдпрд╣ рдХрд╣рд╛рдВ рдШреВрдо рд░рд╣рд╛ рд╣реИред


рдЙрди рдЕрджреГрд╢реНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд▓рд┐рдП рдордВрдбрд▓рд┐рдпреЛрдВ, рд░реЗрдЦрд╛рдУрдВ рдФрд░ рдЕрдиреНрдп рд╕реНрдерд▓реЛрдВ рдХреЗ "рдбреНрд░рд╛рдЗрдВрдЧ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдЬрд┐рди рдкрд░ рдПрдирд┐рдореЗрд╢рди рдмрдиреЗ рд╣реИрдВред рдпрд╣ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд╕рдВрдХреЗрдд рджреЗрдЧрд╛ рдХрд┐ рд╡реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░реА рдХреЗ рдмрд┐рдирд╛ рдЬрд▓реНрджреА рд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдЯрд┐рд▓ рд╣реИред рдлрд┐рд░ рдпрд╣ рд╕рдм рдЯрд┐рдкреНрдкрдгреА рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдФрд░ рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВ рдкрд░ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рд╡реЗ рдзрдиреНрдпрд╡рд╛рдж рдХрд╣реЗрдВрдЧреЗред

 for (int i = 0; i < NUMBER_OF_POINTS; i++) { if (distance(texture_coord, u_points[i]) < 0.02) { gl_FragColor = WHITE; break; } } 


рд╕рдм рдареАрдХ рд╣реИред рдЖрдЗрдП рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рднреА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЙрдиреНрд╣реЗрдВ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░реНрдХрд▓ рдореЗрдВ рдЬрд╛рдиреЗ рджреЗрдВ, рдлрд┐рд░ рд╣рдо рдмрд╛рдж рдореЗрдВ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рд▓реМрдЯреЗрдВрдЧреЗред рдЧреБрдгрд╛рдВрдХ рднреА рдЖрдВрдЦреЛрдВ рдкрд░ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдмрд╕ рдЕрдкрдиреЗ рдЖрдВрджреЛрд▓рди рдХреЛ рдереЛрдбрд╝рд╛ рдзреАрдорд╛ рдХрд░рдиреЗ рдФрд░ рджреЛрд▓рдиреЛрдВ рдХреЗ рдЖрдпрд╛рдо рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред


 function movePoints(timeStamp) { if (timeStamp) { for (let i = 0; i < NUMBER_OF_POINTS; i++) { POINTS[i][0] += Math.sin(i * timeStamp / 5000.0) / 500.0; POINTS[i][1] += Math.cos(i * timeStamp / 5000.0) / 500.0; } } } 

рд╢реЗрдбрд░ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВред рднрд╡рд┐рд╖реНрдп рдХреЗ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдорд┐рд▓реЗрдЧреА, рдЬрд┐рд╕рдореЗрдВ рд╕рдм рдХреБрдЫ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рддреЛ рд╣рдо рд╕реЗрдЯ рд╕реЗ рд╡рд░реНрддрдорд╛рди рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рдмрд┐рдВрджреБ рдХреЛ рдирд┐рдХрдЯрддрдо рдкрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рдмрд┐рдВрджреБ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдмрдЪрд╛рддреЗ рд╣реИрдВ - рдпрд╣ рдХреНрд╖реЗрддреНрд░ рд╕рдВрдЦреНрдпрд╛ рд╣реИред


 float min_distance = 1.0; int area_index = 0; for (int i = 0; i < NUMBER_OF_POINTS; i++) { float current_distance = distance(texture_coord, u_points[i]); if (current_distance < min_distance) { min_distance = current_distance; area_index = i; } } 

рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдлрд┐рд░ рд╕реЗ рдЪрдордХреАрд▓реЗ рд░рдВрдЧреЛрдВ рдореЗрдВ рд╕рдм рдХреБрдЫ рдкреЗрдВрдЯ рдХрд░рддреЗ рд╣реИрдВ:


 gl_FragColor = texture2D(u_texture, texture_coord); gl_FragColor.g = abs(sin(float(area_index))); gl_FragColor.b = abs(sin(float(area_index))); 

рд╕рдорд╛рди рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдореЙрдбреНрдпреВрд▓ (рдПрдмреНрд╕) рдФрд░ рд╕реАрдорд┐рдд рдХрд╛рд░реНрдпреЛрдВ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд╛рдк рдФрд░ рдХреЙрд╕ рдореЗрдВ) рдХрд╛ рд╕рдВрдпреЛрдЬрди рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдУрд░, рдпрд╣ рдереЛрдбрд╝рд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХрддрд╛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдУрд░, рдпрд╣ рддреБрд░рдВрдд 0 рд╕реЗ 1 рддрдХ рдПрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ - рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдореВрд▓реНрдп рд╣реИрдВ рдЬреЛ рдЗрди рд╕реАрдорд╛рдУрдВ рдХреЗ рднреАрддрд░ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдЭреВрда рдмреЛрд▓рддреЗ рд╣реИрдВред

рд╣рдо рд╕реЗрдЯ рд╕реЗ рдХрдИ рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рд╕рдордмрд╛рд╣реБ рдЕрдВрдХ рдкрд╛рдПрдВрдЧреЗ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рд░рдВрдЧ рджреЗрдВрдЧреЗред рдпрд╣ рдХреНрд░рд┐рдпрд╛ рд╡рд┐рд╢реЗрд╖ рдкреЗрд▓реЛрдб рдирд╣реАрдВ рд▓реЗ рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдо рдХреЛ рджреЗрдЦрдирд╛ рдЕрднреА рднреА рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред


 int number_of_near_points = 0; for (int i = 0; i < NUMBER_OF_POINTS; i++) { if (distance(texture_coord, u_points[i]) < min_distance + EPSILON) { number_of_near_points++; } } if (number_of_near_points > 1) { gl_FragColor.rgb = vec3(1.0); } 

рдЖрдкрдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП:



рдпрд╣ рдЕрднреА рднреА рдПрдХ рдорд╕реМрджрд╛ рд╣реИ, рд╣рдо рдЕрднреА рднреА рдЗрд╕реЗ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рдЕрдм рд╡рд┐рдорд╛рди рдХреЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрд▓рдЧрд╛рд╡ рдХреА рд╕рд╛рдорд╛рдиреНрдп рдЕрд╡рдзрд╛рд░рдгрд╛ рд╕реНрдкрд╖реНрдЯ рд╣реИред


рддрд╕реНрд╡реАрд░реЛрдВ рд╕реЗ рдореЛрдЬрд╝реЗрдХ


рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЕрдкрдиреЗ рд╢реБрджреНрдз рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡рд┐рднрд╛рдЬрди рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд▓рд╛рдн рдирд╣реАрдВ рд╣реИред рдЕрдкрдиреЗ рдХреНрд╖рд┐рддрд┐рдЬ рдХреЛ рд╡реНрдпрд╛рдкрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рд╕рд┐рд░реНрдл рдордиреЛрд░рдВрдЬрди рдХреЗ рд▓рд┐рдП, рдЖрдк рдЙрд╕рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рд╛рдЗрдЯ рдкрд░ рдпрд╣ рдПрдХ рдЬреЛрдбрд╝реЗ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рддрд╕реНрд╡реАрд░реЗрдВ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдореЛрдЬрд╝реЗрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реЛрдЧрд╛ред рдЪрд▓реЛ рдмрдирд╛рд╡рдЯ рдмрдирд╛рдиреЗ рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдереЛрдбрд╝рд╛ рдХрдо рдХрд░реЗрдВ, рддрд╛рдХрд┐ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛрдВред


 function createTextures() { for (let i = 0; i < URLS.textures.length; i++) { createTexture(i); } } function createTexture(index) { const image = new Image(); image.crossOrigin = 'anonymous'; image.onload = () => { const texture = GL.createTexture(); GL.activeTexture(GL['TEXTURE' + index]); GL.bindTexture(GL.TEXTURE_2D, texture); GL.pixelStorei(GL.UNPACK_FLIP_Y_WEBGL, true); GL.texImage2D(GL.TEXTURE_2D, 0, GL.RGB, GL.RGB, GL.UNSIGNED_BYTE, image); GL.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_WRAP_S, GL.CLAMP_TO_EDGE); GL.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_WRAP_T, GL.CLAMP_TO_EDGE); GL.texParameteri(GL.TEXTURE_2D, GL.TEXTURE_MIN_FILTER, GL.LINEAR); GL.uniform1i(GL.getUniformLocation(PROGRAM, 'u_textures[' + index + ']'), index); }; image.src = URLS.textures[index]; } 

рдХреБрдЫ рднреА рдЕрд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реБрдЖ, рд╣рдордиреЗ рд╕рд┐рд░реНрдл рд╢реВрдиреНрдп рдХреЛ index рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдФрд░ рдореМрдЬреВрджрд╛ рдХреЛрдб рдХреЛ рддреАрди рдмрдирд╛рд╡рдЯреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред Shader рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдм рдПрдХ рдмрдирд╛рд╡рдЯ рд╣реИ:


 #define NUMBER_OF_TEXTURES 3 uniform sampler2D u_textures[NUMBER_OF_TEXTURES]; 

рдЕрдм рд╣рдо рддреАрди рдмрдирд╛рд╡рдЯреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╕рд╣реЗрдЬреЗ рдЧрдП рдХреНрд╖реЗрддреНрд░ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди ...


рд▓реЗрдХрд┐рди рдЙрд╕рд╕реЗ рдкрд╣рд▓реЗ рдореИрдВ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╡рд┐рд╖рдпрд╛рдВрддрд░ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдкреАрдбрд╝рд╛рджрд╛рдпрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдЖрдзреБрдирд┐рдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ (рд╕рд╢рд░реНрдд рд░реВрдк рд╕реЗ ES6 +) рдПрдХ рдЕрдЪреНрдЫреА рднрд╛рд╖рд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВ, рдХрд┐рд╕реА рднреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреНрд░рддрд┐рдорд╛рди рддрдХ рд░реВрдкрд░реЗрдЦрд╛ рдХреЛ рд╕реАрдорд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдкрд░ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рд▓рд┐рдП - рдпрд╣ рдмрд╛рдд рд╣реИ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХрд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рддрд╛ рд╣реИред рд╢реБрджреНрдз C рдПрдХ рдЕрдзрд┐рдХ рдХрдареЛрд░ рднрд╛рд╖рд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рдХреБрдЫ рднреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЖрдк рдЗрд╕ рдкрд░ рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЬреЗрдПрд╕ рдХреЗ рдмрд╛рдж рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдЕрдЬреАрдм, рдкреБрд░рд╛рдиреЗ рдЬрдорд╛рдиреЗ рдпрд╛ рдХреБрдЫ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рднреА, рд╡рд╣ рдЕрднреА рднреА рдЕрдЪреНрдЫрд╛ рд╣реИред рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдореМрдЬреВрдж GLSL рд╕рд┐рд░реНрдл рдХреБрдЫ рд╣реИред рди рдХреЗрд╡рд▓ рдпрд╣ рд╕реА рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкрд░рд┐рдорд╛рдг рдХрд╛ рдПрдХ рдХреНрд░рдо рд╣реИ, рдЗрд╕рдореЗрдВ рдЕрднреА рднреА рдХрдИ рдкрд░рд┐рдЪрд┐рдд рдСрдкрд░реЗрдЯрд░реЛрдВ рдФрд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЕрднрд╛рд╡ рд╣реИред WebGL рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдЬрдЯрд┐рд▓ рд╢реЗрдб рд▓рд┐рдЦрддреЗ рд╕рдордп рдпрд╣ рд╕рдВрднрд╡рддрдГ рд╕рдмрд╕реЗ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдмрджрд▓ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЖрддрдВрдХ рдХреЗ рдкреАрдЫреЗ, рдореВрд▓ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкрд░ рдПрдХ рдирдЬрд╝рд░ рд░рдЦрдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдХреБрдЫ рдХреЛрдбрд░ рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдЬрдм рддрдХ рд╡реЗ рд╕реА рдирд╣реАрдВ рд╕реАрдЦрддреЗ, рдЙрдирдХреЗ рд▓рд┐рдП рд╢реЗрдбреНрд╕ рдХрд╛ рд░рд╛рд╕реНрддрд╛ рдмрдВрдж рд╣реИред рддреЛ: C рдХрд╛ рдЬреНрдЮрд╛рди рдпрд╣рд╛рдБ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдпрд╣рд╛рдБ рдХрд┐рд╕реА рддрд░рд╣ рдХреА рдЕрдкрдиреА рджреБрдирд┐рдпрд╛ рд╣реИред рдкрд╛рдЧрд▓рдкрди, рдбрд╛рдпрдирд╛рд╕реЛрд░ рдФрд░ рдмреИрд╕рд╛рдЦреА рдХреА рджреБрдирд┐рдпрд╛ред


рдореИрдВ рдПрдХ рдирдВрдмрд░ рд╡рд╛рд▓реЗ рддреАрди рдЯреЗрдХреНрд╕рдЯ рдХреЛ рдХреИрд╕реЗ рдЪреБрди рд╕рдХрддрд╛ рд╣реВрдВ - рдПрд░рд┐рдпрд╛ рдирдВрдмрд░ред рд╢реЗрд╖ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдмрдирд╛рд╡рдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рдЖрддрд╛ рд╣реИред рдорд╣рд╛рди рд╡рд┐рдЪрд╛рд░ рд╣реИред рдХреЗрд╡рд▓ % рдСрдкрд░реЗрдЯрд░, рдЬреЛ рд╣рд╛рде рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдВ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЛ рд╕рдордЭрдиреЗ рдХреА рдзрд╛рд░рдгрд╛ рдЪрд┐рддреНрд░ рджреНрд╡рд╛рд░рд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╡рд░реНрдгрд┐рдд рд╣реИ:


рдЫрд╡рд┐


рдмреЗрд╢рдХ рдЖрдк рдХрд╣рддреЗ рд╣реИрдВ, "рд╣рд╛рдБ, рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рдПрдХ mod рдХрд╛рд░реНрдп рд╣реИ - рдЪрд▓реЛ рдЗрд╕реЗ рд▓реЗрддреЗ рд╣реИрдВ!" рд▓реЗрдХрд┐рди рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╡рд╣ рджреЛ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдХреЗрд╡рд▓ рднрд┐рдиреНрдирд╛рддреНрдордХред рдареАрдХ рд╣реИ, рдареАрдХ рд╣реИ, рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ float рдмрдирд╛рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдПрдХ float рднреА рдорд┐рд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдПрдХ int рдЬрд░реВрд░рдд рд╣реИред рдЖрдкрдХреЛ рд╕рдм рдХреБрдЫ рд╡рд╛рдкрд╕ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛, рдЕрдиреНрдпрдерд╛ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рд╣реЛрдиреЗ рдХреА рдПрдХ рдЧреИрд░-рдирдХрд▓реА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред


 int texture_index = int(mod(float(area_index), float(NUMBER_OF_TEXTURES))); 

рдФрд░ рдпрд╣рд╛рдВ рдПрдХ рдмрдпрд╛рдирдмрд╛рдЬреА рдХрд╛ рд╕рд╡рд╛рд▓ рд╣реИ: рд╢рд╛рдпрдж рдорд╛рдирдХ рддрд░реАрдХреЛрдВ рд╕реЗ рдЗрд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдкреВрд░реНрдгрд╛рдВрдХ рд╡рд┐рднрд╛рдЬрди рдХреЗ рд╢реЗрд╖ рдХреЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рдХреЛ рдорд╣рд╕реВрд╕ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛? рдФрд░ рдпрд╣ рдЕрднреА рднреА рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХрд╛рд░реНрдп рд╣реИ, рдФрд░ рдРрд╕рд╛ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╣реБрдд рдЧрд╣рд░рд╛рдИ рд╕реЗ рдПрдореНрдмреЗрдбреЗрдб рдЕрдиреБрдХреНрд░рдо рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред


рдареАрдХ рд╣реИ, рдЪрд▓реЛ рдЗрд╕реЗ рдЕрднреА рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреЗрдВред рдмрд╕ рдЪрдпрдирд┐рдд рдмрдирд╛рд╡рдЯ рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рдкрд┐рдХреНрд╕реЗрд▓ рдХрд╛ рд░рдВрдЧ рд▓реЗрдВ рдФрд░ рдЗрд╕реЗ рдЪрд░ gl_FragColor ред рддреЛ? рдХреНрдпрд╛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдРрд╕рд╛ рдХрд░ рд▓рд┐рдпрд╛ рдерд╛? рдФрд░ рдлрд┐рд░ рдпрд╣ рдмрд┐рд▓реНрд▓реА рдлрд┐рд░ рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред рдХрд┐рд╕реА рдПрд░реЗ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдкрд░ рдЖрдк рдиреЙрди-рдХрдВрдЯреАрдиреНрдпреВ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдФрд░ рдЬреЛ рд╣рдордиреЗ рдЧрдгрдирд╛ рдХреА рд╡рд╣ рдЕрдм рд╕реНрдерд┐рд░ рдирд╣реАрдВ рд╣реИред рдмрд╛-рдбрдо-рдЯреЙрд╕ !!!


рдЖрдкрдХреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:


 if (texture_index == 0) { gl_FragColor = texture2D(u_textures[0], texture_coord); } else if (texture_index == 1) { gl_FragColor = texture2D(u_textures[1], texture_coord); } else if (texture_index == 2) { gl_FragColor = texture2D(u_textures[2], texture_coord); } 

рд╕рд╣рдордд, рдРрд╕рд╛ рдХреЛрдб govnokod.ru рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реАрдзреА рд╕рдбрд╝рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ switch-case рднреА рдХрдо рд╕реЗ рдХрдо рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЗрд╕ рдЕрдкрдорд╛рди рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдФрд░, рдХрдо рд╕реНрдкрд╖реНрдЯ рдмреИрд╕рд╛рдЦреА рд╣реИ рдЬреЛ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреА рд╣реИ:


 for (int i = 0; i < 3; i++) { if (texture_index == i) { gl_FragColor = texture2D(u_textures[i], texture_coord); } } 

рд╕рд╛рдЗрдХрд┐рд▓ рдХрд╛рдЙрдВрдЯрд░, рдЬреЛ рдПрдХ рд╕реЗ рдмрдврд╝рддреЗ рд╣реИрдВ, рд╕рдВрдХрд▓рдХ рдПрдХ рд╕реНрдерд┐рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЧрд┐рди рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдмрдирд╛рд╡рдЯ рдХреЗ рдПрдХ рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ - рдЕрдВрддрд┐рдо рдХреНрд░реЛрдо рдореЗрдВ, рдПрдХ рддреНрд░реБрдЯрд┐ рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рдкреЙрдк рдЕрдк рд╣реБрдИ рдХрд┐ рдпрд╣ рдПрдХ рдмрдирд╛рд╡рдЯ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдерд╛ред рдПрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде, рдЗрд╕рдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ред рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпреЛрдВ рдпрд╣ рдПрдХ рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ? рдЕрдЧрд░ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреЗрдПрд╕рдПрд▓ рдореЗрдВ рдЯрд╛рдЗрдк рдХрд╛рд╕реНрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдЬрд╛рджреВ рд╕реЗ рднрд░рд╛ рдерд╛ - рдЬреАрдПрд▓рдПрд╕рдПрд▓ рдореЗрдВ "рд╕реНрдерд┐рд░ - рд╕реНрдерд┐рд░ рдирд╣реАрдВ" рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдЫрд╛рдБрдЯреЗрдВред рдордЬреЗрджрд╛рд░ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рдкрд░ рднреА рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдПрдирд╡реАрдЖрдИрдбреАрдЖрдИрдП рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХрд╛рд░реНрдб рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рдореБрд╢реНрдХрд┐рд▓ рдмреИрд╕рд╛рдЦреА рдПрдПрдордбреА рдкрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЯреВрдЯ рд╕рдХрддреА рд╣реИред


рд╕рдВрдХрд▓рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдорд╛рдиреНрдпрддрд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдРрд╕реЗ рдирд┐рд░реНрдгрдпреЛрдВ рд╕реЗ рдмрдЪрдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рд╡реЗ рдЯреВрдЯ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрддрд╛ рд╣реИред

рджреБрдГрдЦ рджреБрдГрдЦ рд╣реИред рд▓реЗрдХрд┐рди, рдЕрдЧрд░ рд╣рдо рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЗрд╕ рд╕рдм рд╕реЗ рдЕрдорд▓ рдХрд░рдиреЗ рдФрд░ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред


рдлрд┐рд▓рд╣рд╛рд▓, рд╣рдореЗрдВ рддрд╕реНрд╡реАрд░реЛрдВ рдХрд╛ рдПрдХ рдореЛрдЬрд╝реЗрдХ рдорд┐рд▓рд╛ред рд▓реЗрдХрд┐рди рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реИ: рдпрджрд┐ рдЕрдВрдХ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм рдЖрддреЗ рд╣реИрдВ, рддреЛ рджреЛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХрд╛ рддреНрд╡рд░рд┐рдд рд╕рдВрдХреНрд░рдордг рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рд╕реБрдВрджрд░ рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ рдХреБрдЫ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдХрд░реАрдм рдирд╣реАрдВ рдЖрдиреЗ рджреЗрддреЗред рдЖрдк рдПрдХ рд╕рд░рд▓ рд╡рд┐рдХрд▓реНрдк рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмреАрдЪ рдХреА рджреВрд░реА рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИ рдФрд░, рдпрджрд┐ рдпрд╣ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдореВрд▓реНрдп рд╕реЗ рдХрдо рд╣реИ, рддреЛ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдХрдорд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдирд╣реАрдВ рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рдХрднреА-рдХрднреА рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдереЛрдбрд╝рд╛ рдореЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрдИ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ рдпрд╣рд╛рдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЧрдгрдирд╛рдПрдВ рдирд╣реАрдВ рд╣реИрдВред рдЕрдзрд┐рдХ рдЙрдиреНрдирдд рд╡рд┐рдХрд▓реНрдк рдЪрд╛рд░реНрдЬрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдФрд░ рдПрдХ "рдХреЛрдмрд╡реЗрдм" рдкреНрд░рдгрд╛рд▓реА рд╣реЛрдЧреА рдЬрд┐рд╕рдореЗрдВ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдЬреЛрдбрд╝реЗ рдЕрджреГрд╢реНрдп рд╕реНрдкреНрд░рд┐рдВрдЧреНрд╕ рджреНрд╡рд╛рд░рд╛ рдЬреБрдбрд╝реЗ рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рд╣рд╛рдИ рд╕реНрдХреВрд▓ рдХреЗ рд▓рд┐рдП рднреМрддрд┐рдХреА рд╕рдВрджрд░реНрдн рдкреБрд╕реНрддрдХ рдореЗрдВ рд╕рднреА рд╕реВрддреНрд░ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред


 for (let i = 0; i < NUMBER_OF_POINTS; i++) { for (let j = i; j < NUMBER_OF_POINTS; j++) { let deltaX = POINTS[i][0] - POINTS[j][0]; let deltaY = POINTS[i][1] - POINTS[j][1]; let distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY); if (distance < 0.1) { POINTS[i][0] += 0.001 * Math.sign(deltaX); POINTS[i][1] += 0.001 * Math.sign(deltaY); POINTS[j][0] -= 0.001 * Math.sign(deltaX); POINTS[j][1] -= 0.001 * Math.sign(deltaY); } } } 

рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╣рдордиреЗ рдЬреЛ рдЫрд╛рдпрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛, рд╡рд╣ рд╕рднреА рдмрд┐рдВрджреБрдУрдВ рдХреА рд╕рднреА рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рд╛рди рдЧрдгрд┐рддрдЬреНрдЮ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрджрд┐ рд╣рдо 10 рдЕрдВрдХ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рджреВрд░реА рдХреА рдЧрдгрдирд╛ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди 1000. рд╣рд╛рдВ, 100 рднреА рд╕рдм рдХреБрдЫ рдзреАрдорд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрд╣ рдХреЗрд╡рд▓ рдХреБрдЫ рд╣реА рдЕрдВрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред


рдпрджрд┐ рд╣рдо рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдореЛрдЬрд╝реЗрдХ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╡рд┐рдорд╛рди рдХреЗ рдкрд░рд┐рдЪрд┐рдд рд╡рд┐рднрд╛рдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рдорд╛рди рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рдЪрд╛рд░ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рдмрд┐рдВрджреБ рдбрд╛рд▓рдирд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕рднреА рддреБрд▓рдирд╛рдУрдВ рдХреЛ рдХреЗрд╡рд▓ рдкрдбрд╝реЛрд╕реА рд╡рд░реНрдЧ рдХреЗ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд░рдирд╛ рд╣реИред рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рдпреЛрдЧреЛрдВ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЕрдВрдХреЛрдВ рдХреЗ рд╕рд╛рде, рдПрдХреАрдХреГрдд рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рд╡рд╛рд▓реЗ рд╕рд╕реНрддреЗ рд▓реИрдкрдЯреЙрдк рдЕрднреА рднреА рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЯреБрдХрдбрд╝реЛрдВ рд╕реЗ рдЕрдкрдиреА рд╕рд╛рдЗрдЯ рдкрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рдореЛрдЬрд╝реЗрдХ рдмрдирд╛рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рджрд╕ рдмрд╛рд░ рд╕реЛрдЪрдиреЗ рдпреЛрдЧреНрдп рд╣реИред


рдореВрд▓реА рдордд рдмрдиреЛ, рдЕрдкрдиреЗ рд╢рд┐рд▓реНрдк рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЬрд╛рдВрдЪ рди рдХреЗрд╡рд▓ рдЕрдкрдиреЗ рдЦрдирди рдЦреЗрдд рдкрд░ рдХрд░реЗрдВ, рдмрд▓реНрдХрд┐ рд╕рд╛рдзрд╛рд░рдг рд▓реИрдкрдЯреЙрдк рдкрд░ рднреА рдХрд░реЗрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореВрд▓ рд░реВрдк рд╕реЗ рд╣реА рд╣реЛрдВрдЧреЗред


рдлрдВрдХреНрд╢рди рдЧреНрд░рд╛рдл рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдкреНрд▓реЗрди рдХрд╛ рд╡рд┐рднрд╛рдЬрди


рдЖрдЗрдП рдПрдХ рд╡рд┐рдорд╛рди рдХреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рджреЗрдЦреЗрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдм рдмрдбрд╝реА рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╢рдХреНрддрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред рдореБрдЦреНрдп рд╡рд┐рдЪрд╛рд░ рдХреБрдЫ рдЧрдгрд┐рддреАрдп рдХрд╛рд░реНрдп рдХрд░рдирд╛ рдФрд░ рдЙрд╕рдХрд╛ рдЧреНрд░рд╛рдл рдмрдирд╛рдирд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдореА рд░реЗрдЦрд╛ рдмрд╕ рд╡рд┐рдорд╛рди рдХреЛ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдЧреАред рдпрджрд┐ рд╣рдо рдлреЙрд░реНрдо y = f(x) рдлрдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдХрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рднрд╛рдЬрди рдорд┐рд▓рддрд╛ рд╣реИред X рдХреЛ Y рд╕реЗ рдмрджрд▓рдиреЗ рдкрд░, рд╣рдо рдХреНрд╖реИрддрд┐рдЬ рдЦрдВрдб рдХреЛ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдзреНрд░реБрд╡реАрдп рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХрд╛рд░реНрдЯреЗрд╕рд┐рдпрди рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдореЗрдВ рд╕рдм рдХреБрдЫ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЧрдгрдирд╛ рдХрд╛ рд╕рд╛рд░ рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкрд░рд┐рдгрд╛рдо рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рдХрдЯреМрддреА рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рдЫреЗрдж рдореЗрдВ рдХрдЯреМрддреА рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдкрд╣рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рджреЗрдЦреЗрдВрдЧреЗред


рдкреНрд░рддреНрдпреЗрдХ Y рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдЦрдВрдб рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП X рдХреЗ рдорд╛рди рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВрдЧреЗред рд╣рдо рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдЗрди рд▓рд╣рд░ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдЙрдмрд╛рдК рд╣реИред рдПрдХ рдмрд╛рд░ рдореЗрдВ рдХреБрдЫ рдЯреБрдХрдбрд╝реЗ рд▓реЗрдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдореЛрдбрд╝рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛрддрд╛ рд╣реИред


рд╣рдо рдХрдИ рд╕рд╛рдЗрдирд╕реЛрдЗрдб рд▓реЗрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд╛рдИ рдФрд░ рд╕рдордп рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдордиреНрд╡рдп рд╕реЗ рдмрдВрдзрд╛ рд╣реБрдЖ рд╣реИ, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рднреМрддрд┐рдХ рд╡рд┐рдЬреНрдЮрд╛рдиреА рдЗрд╕ рдЬреЛрдбрд╝ рдХреЛ рд╕реБрдкрд░рдкреЛрдЬрд┐рд╢рди рдХрд╣реЗрдВрдЧреЗред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдкреВрд░реЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдХреБрдЫ рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдЖрдпрд╛рдо рдмрджрд▓рддреЗ рд╣реИрдВред рдЗрд╕реЗ рдЕрд▓рдЧ рдореИрдХреНрд░реЛ рдореЗрдВ рдирд┐рдХрд╛рд▓ рд▓реЗрдВред рдпрджрд┐ рдЖрдк рд╕рдордиреНрд╡рдп - рд╕рд╛рдЗрди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрд╡реГрддреНрддрд┐ рдмрджрд▓ рдЬрд╛рдПрдЧреАред рдпрд╣ рд╣рдо рдкрд╣рд▓реЗ рд╣реА рдПрдХ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рджреЗрдЦ рдЪреБрдХреЗ рд╣реИрдВред рд╣рдо рд╕реВрддреНрд░ рд╕реЗ рд╕рднреА рд╕рд╛рдЗрдирд╕реЛрдЗрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдЖрд╡реГрддреНрддрд┐ рд╕рдВрд╢реЛрдзрдХ рд╕рд╛рдорд╛рдиреНрдп рдХреЛ рднреА рд╣рдЯрд╛ рджреЗрддреЗ рд╣реИрдВред рдпрд╣ рд╕рдордп рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░реЗрдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдХреЗрдд рд▓рд╛рдЗрди рдХреЛ рд╡рд┐рдкрд░реАрдд рджрд┐рд╢рд╛ рдореЗрдВ рд▓реЗ рдЬрд╛рдиреЗ рдХрд╛ рдкреНрд░рднрд╛рд╡ рджреЗрдЧрд╛ред


 float time = u_time * SPEED; float x = (sin(texture_coord.y * FREQUENCY) + sin(texture_coord.y * FREQUENCY * 2.1 + time) + sin(texture_coord.y * FREQUENCY * 1.72 + time * 1.121) + sin(texture_coord.y * FREQUENCY * 2.221 + time * 0.437) + sin(texture_coord.y * FREQUENCY * 3.1122 + time * 4.269)) * AMPLITUDE; 

рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдРрд╕реА рд╡реИрд╢реНрд╡рд┐рдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдХрд╛рдлреА рдХрдо рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдПрдХ рд╣реА рдЖрдВрджреЛрд▓рди рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЧреБрдгрд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рд╕рдм рдХреБрдЫ рдЧреБрдгрд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЫреЛрдЯреА рд╕рд╛рдорд╛рдиреНрдп рдмрд╣реБ рдмрд╣реБрдд рдмрдбрд╝реА рд╣реИред рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЬрдирд░реЗрдЯрд░ рдореЗрдВ рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛рдж рд╣реИ? рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдордиреЗ рд╕реЛрдЪрд╛ рдирд╣реАрдВ рдерд╛ рдФрд░ рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рддреИрдпрд╛рд░ рд╕рдВрдЦреНрдпрд╛рдПрдВ рд▓реАрдВ, рд▓реЗрдХрд┐рди рдХреЛрдИ рднреА рд╣рдорд╛рд░реЗ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред


рдпрд╣ рдХреЗрд╡рд▓ рд╣рдорд╛рд░реЗ рдлрдВрдХреНрд╢рди рдЧреНрд░рд╛рдл рдХреЗ рдКрдкрд░ рдХреЗ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП рджреЛ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд░рд╣рддрд╛ рд╣реИ рдФрд░ рджреВрд╕рд░рд╛ рдЗрд╕рдХреЗ рдиреАрдЪреЗ рдХреЗ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдПред рдмрд╛рдИрдВ рдФрд░ рджрд╛рдИрдВ рдУрд░ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ, рд╣рдо рд╕рднреА рдореБрдбрд╝ рдЧрдП:


 if (texture_coord.x - 0.5 > x) { gl_FragColor = texture2D(u_textures[0], texture_coord); } else { gl_FragColor = texture2D(u_textures[1], texture_coord); } 

рд╣рдореЗрдВ рдЬреЛ рдорд┐рд▓рд╛ рд╡рд╣ рдзреНрд╡рдирд┐ рддрд░рдВрдЧреЛрдВ рдЬреИрд╕рд╛ рдерд╛ред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ, рдЖрд╕реНрдЯрд╕реАрд▓рд╕реНрдХрдк рдкрд░ рдЙрдирдХреА рдЫрд╡рд┐ред рджрд░рдЕрд╕рд▓, рд╣рдо рдЕрдкрдиреЗ рд╕рд╛рдЗрдирд╕реЙрдЗрдб рдХреЗ рдмрдЬрд╛рдп рдХрд┐рд╕реА рддрд░рд╣ рдХреА рдзреНрд╡рдирд┐ рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдбреЗрдЯрд╛ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдзреНрд╡рдирд┐ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╖рдп рд╣реИред



рдорд╛рд╕реНрдХ


рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рдХрд╛рдлреА рддрд╛рд░реНрдХрд┐рдХ рдЯрд┐рдкреНрдкрдгреА рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП: рдпрд╣ рд╕рдм рдПрд╕рд╡реАрдЬреА рдореЗрдВ рдореБрдЦреМрдЯреЗ рдХреЗ рдХрд╛рдо рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ (рдпрджрд┐ рдЖрдкрдиреЗ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд▓реЗрдЦ рдПрд╕рд╡реАрдЬреА рдорд╛рд╕реНрдХ рдФрд░ рд╡рд╛рд╣ рдкреНрд░рднрд╛рд╡ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ)ред рдпрд╣ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╣рдо рдЙрдиреНрд╣реЗрдВ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рдкрд░рд┐рдгрд╛рдо рд╕рдорд╛рди рд╣реИ - рдХреБрдЫ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдПрдХ рдмрдирд╛рд╡рдЯ рдХреЗ рд╕рд╛рде рдЪрд┐рддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреБрдЫ рдХреЛ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рдеред рдХреЗрд╡рд▓ рд╕рд╣рдЬ рд╕рдВрдХреНрд░рдордг рдЕрднреА рддрдХ рдирд╣реАрдВ рд╣реБрдЖ рд╣реИред рддреЛ рдЪрд▓реЛ рдПрдХ рдХрд░рддреЗ рд╣реИрдВред


рд╣рдо рд╕рднреА рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рдФрд░ рдорд╛рдЙрд╕ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред рдХрд░реНрд╕рд░ рд╕реНрдерд╛рди рдкрд░ рдХреЗрдВрджреНрд░ рдХреЗ рд╕рд╛рде рдПрдХ рд░реЗрдбрд┐рдпрд▓ рдврд╛рд▓ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рдорд╛рд╕реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, shader рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдзрд┐рдХ рдмрд╛рд░реАрдХреА рд╕реЗ SVG рдореЗрдВ рдорд╛рд╕реНрдХ рдХреЗ рддрд░реНрдХ рд╕реЗ рдорд┐рд▓рддрд╛-рдЬреБрд▓рддрд╛ рд╣реИ, рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВред рд╣рдореЗрдВ mix рдлрдВрдХреНрд╢рди рдФрд░ рдбрд┐рд╕реНрдЯреЗрдВрд╕ рдХреЗ рдХреБрдЫ рдлрдВрдХреНрд╢рди рдЪрд╛рд╣рд┐рдПред рдкрд╣рд▓реЗ рджреЛрдиреЛрдВ рдмрдирд╛рд╡рдЯ рд╕реЗ рдкрд┐рдХреНрд╕реЗрд▓ рд░рдВрдЧ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдорд┐рд▓рд╛рдПрдЧрд╛, рддреАрд╕рд░реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЧреБрдгрд╛рдВрдХ (0 рд╕реЗ 1 рддрдХ) рд▓реЗ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХреМрди рд╕реЗ рдорд╛рди рдкреНрд░рдмрд▓ рд╣реЛрдВрдЧреЗред рд╣рдо рд╕рд╛рдЗрди рдореЙрдбреБрд▓рд╕ рдХреЛ рджреВрд░реА рдХреЗ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВ - рдпрд╣ рд╕рд┐рд░реНрдл 0 рдФрд░ 1 рдХреЗ рдмреАрдЪ рдХреЗ рдореВрд▓реНрдп рдореЗрдВ рдПрдХ рд╕рд╣рдЬ рдмрджрд▓рд╛рд╡ рджреЗрдЧрд╛ред


 gl_FragColor = mix( texture2D(u_textures[0], texture_coord), texture2D(u_textures[1], texture_coord), abs(sin(length(texture_coord - u_mouse_position / u_canvas_size)))); 

рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдкрд░рд┐рдгрд╛рдо:



рдПрд╕рд╡реАрдЬреА рдкрд░ рдореБрдЦреНрдп рд▓рд╛рдн рд╕реНрдкрд╖реНрдЯ рд╣реИ:


рдПрд╕рд╡реАрдЬреА рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣рд╛рдВ рд╣рдо рд╡рд┐рднрд┐рдиреНрди рдЧрдгрд┐рддреАрдп рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рдиреА рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдЧреНрд░реЗрдбрд┐рдПрдВрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХрдИ рд░реИрдЦрд┐рдХ рдЧреНрд░реЗрдбрд┐рдПрдВрдЯреНрд╕ рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдЗрдХрдЯреНрдард╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдп рд╣реИ рдЬрд┐рд╕реЗ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЪрд┐рдХрдиреА рд╕рдВрдХреНрд░рдордг рдпрд╛ рдЬрдЯрд┐рд▓ рд░реВрдкреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдЬреЛ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ shaders рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд┐рдирд╛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред рд╣рд╛рдВ, рдФрд░ рдХрдордЬреЛрд░ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдмреЗрд╣рддрд░ рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред рдЕрдкрдиреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдЙрдкрдХрд░рдг рдЪреБрдиреЗрдВред


рд╢реИрдХреНрд╖рд┐рдХ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рд╕рд░реНрдХрд▓ рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рдмрдирд╛рд╡рдЯ рд░рд╣реЗрдЧреА рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╣реИ:


 gl_FragColor = texture2D(u_textures[0], texture_coord); float dist = distance(texture_coord, u_mouse_position / u_canvas_size); if (dist < 0.3) { return; } 

рдФрд░ рдмрд╛рдХреА рдХреЛ рд╡рд┐рдХрд░реНрдг рдзрд╛рд░рд┐рдпреЛрдВ рд╕реЗ рднрд░реЗрдВ:


 float value = sin((texture_coord.y - texture_coord.x) * 200.0); if (value > 0.0) { gl_FragColor.rgb *= dist; } else { gl_FragColor.rgb *= dist / 10.0; } 

рд╕реНрд╡реАрдХреГрддрд┐ рд╕рдорд╛рди рд╣реИрдВ - рд╣рдо рдкрдЯреНрдЯрд┐рдпреЛрдВ рдХреА рдЖрд╡реГрддреНрддрд┐ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрди рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВ; рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдпреЛрдВ рдХреЛ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ; рдкреНрд░рддреНрдпреЗрдХ рдкрдбрд╝рд╛рд╡ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреЗ рддрд░реАрдХреЗ рд╕реЗ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд░рдВрдЧ рдХреЛ рдмрджрд▓рддреЗ рд╣реИрдВред рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реИ рдХрд┐ рддрд┐рд░рдЫреА рд░реЗрдЦрд╛рдПрдБ рдЦреАрдВрдЪрдирд╛ рдЖрдорддреМрд░ рдкрд░ X рдФрд░ Y рдореЗрдВ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рд░рдВрдЧ рдмрджрд▓рддреЗ рд╕рдордп рдорд╛рдЙрд╕ рдХрд░реНрд╕рд░ рдХреА рджреВрд░реА рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдЫрд╛рдпрд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реЛрддрд╛ рд╣реИред рдЙрд╕реА рддрд░рд╣, рдЖрдк рдЗрд╕реЗ рдЬреНрдпрд╛рдорд┐рддреАрдп рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдЬрд▓реНрдж рд╣реА рдЗрд╕реЗ рдкрд┐рдХреНрд╕реЗрд▓реЗрд╢рди рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рджреЗрдЦреЗрдВрдЧреЗред рдЗрд╕ рдмреАрдЪ, рдЗрд╕ shader рдХреЗ рдкрд░рд┐рдгрд╛рдо рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:



рд╕рд░рд▓ рдФрд░ рд╕реБрдВрджрд░ред


рдФрд░ рд╣рд╛рдВ, рдпрджрд┐ рдЖрдк рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЪрд┐рддреНрд░реЛрдВ рд╕реЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╡реАрдбрд┐рдпреЛ рд╕реЗ рдлреНрд░реЗрдо рд╕реЗ рдмрдирд╛рд╡рдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдХрдИ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ), рдФрд░ рдЙрди рдкрд░ рд╣рдорд╛рд░реЗ рд╕рднреА рдкреНрд░рднрд╛рд╡ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред Awwwards рдЬреИрд╕реА рдХрдИ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕рд╛рдЗрдЯреЗрдВ рд╡реАрдбрд┐рдпреЛ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдЗрди рдкреНрд░рднрд╛рд╡реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИрдВред

рдпрд╣ рдПрдХ рдФрд░ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ:


рдХреЛрдИ рднреА рдПрдХ рдмрдирд╛рд╡рдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рд╕реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╣рдо рдПрдХ рддрд╕реНрд╡реАрд░ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдореЗрдВ рдЗрд╕рдХреЗ рдкрд┐рдХреНрд╕рд▓ рдХреЗ рд░рдВрдЧ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЪрд╛рд╣реЗ рд╡рд╣ рдЕрдиреНрдп рд░рдВрдЧреЛрдВ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реЛ, рдкрдХреНрд╖реЛрдВ рдореЗрдВ рдмрджрд▓рд╛рд╡ рд╣реЛ рдпрд╛ рдХреБрдЫ рдФрд░ рдЬреЛ рдЖрдкрдХреЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрдПред

рд▓реЗрдХрд┐рди рд╡рд┐рдорд╛рди рдХреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ред


рдкрд┐рдХреНрд╕реЗрд▓реЗрд╢рди


рдпрд╣ рдкреНрд░рднрд╛рд╡ рдХреБрдЫ рд╣рдж рддрдХ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рдпрд╣ рдЗрддрдирд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдХрд┐ рдЗрд╕реЗ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЧрд▓рдд рд╣реЛрдЧрд╛ред рд╣рдорд╛рд░реЗ рд╡рд┐рдорд╛рди рдХреЛ рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ, рдЙрд╕реА рддрд░рд╣ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рд╢реЛрд░ рдЬрдирд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдерд╛, рдФрд░ рдлрд┐рд░ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдХреЗ рдЕрдВрджрд░ рд╕рднреА рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рд╣реА рд░рдВрдЧ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рд╡рд░реНрдЧ рдХреЗ рдХреЛрдиреЛрдВ рд╕реЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдорд┐рд▓рд╛рдХрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдХреБрдЫ рд╕рдорд╛рди рдХрд┐рдпрд╛ рдерд╛ред рдЗрд╕ рдкреНрд░рднрд╛рд╡ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЬрдЯрд┐рд▓ рд╕реВрддреНрд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдмрд╕ рд╕рднреА рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝ рджреЗрдВ рдФрд░ 4 рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ - рд╡рд░реНрдЧ рдХреЗ рдХреЛрдгреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред


 float block_size = abs(sin(u_time)) / 20.0; vec2 block_position = floor(texture_coord / block_size) * block_size; gl_FragColor = ( texture2D(u_textures[0], block_position) + texture2D(u_textures[0], block_position + vec2(1.0, 0.0) * block_size) + texture2D(u_textures[0], block_position + vec2(0.0, 1.0) * block_size) + texture2D(u_textures[0], block_position + vec2(1.0, 1.0) * block_size) ) / 4.0; 

рд╣рдо рдлрд┐рд░ рд╕реЗ рд╕рд╛рдЗрди рдореЙрдбреНрдпреВрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдордп-рд╕рдордп рдкрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдпрд╣ рдмрджрд▓рддрд╛ рд╣реИред



рдкрд┐рдХреНрд╕реЗрд▓ рддрд░рдВрдЧреЗрдВ


, .


 float block_size = abs(sin( length(texture_coord - u_mouse_position / u_canvas_size) * 2.0 - u_time)) / 100.0 + 0.001; 

, 0 1; , , , . , .



"" , , -. . " ", , . . тАФ . .


рдкрд░рд┐рдгрд╛рдо


, , , , . -. - - . . . , , , .




PS: , WebGL ( ) ? , , . ?

Source: https://habr.com/ru/post/hi421821/


All Articles