
рд╢реБрдн рджреЛрдкрд╣рд░, рдЦрд╛рдмрд░рд╡рдЪрд┐рдпрди!
рдореИрдВ рджреГрд╢реНрдп рдХреА рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, 2 рдбреА-рд╕реНрдкреЗрд╕ рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рдФрд░ рдЫрд╛рдпрд╛рдВрдХрди рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧрд┐рд╢ рдФрд░ рд╕реБрдкрд░ рдореАрдЯрдмреЛрдп рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд╕рдВрдж рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдорд┐рддрдмрд╛ рдореЗрдВ рдпрд╣ рдХреЗрд╡рд▓ рдврд╣рдиреЗ рдпрд╛ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд╕рд╛рде рдЧрддрд┐рд╢реАрд▓ рд╕реНрддрд░реЛрдВ рдкрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЧреБрдЗрдЪ рдореЗрдВ рдпрд╣ рд╣рд░ рдЬрдЧрд╣ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдЦреЗрд▓реЛрдВ рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рдореБрдЭреЗ рдЗрддрдирд╛ "рдЧрд░реНрдо" рд▓рдЧрддрд╛ рд╣реИ, рджреАрдкрдХ, рдХрд┐ рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдЦреБрдж рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдФрд░ рдпрд╣рд╛рдБ рдХреНрдпрд╛ рдпрд╣ рдЖрдпрд╛ рд╣реИред
рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ:
- рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд 2D рджреБрдирд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЛ рдЧрддрд┐рд╢реАрд▓ рдкреНрд░рдХрд╛рд╢ + рдЫрд╛рдпрд╛рдВрдХрди рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ; рджреБрдирд┐рдпрд╛ рдЬрд░реВрд░реА рдЯрд╛рдЗрд▓ рдирд╣реАрдВ рд╣реИ, рдХрд┐рд╕реА рднреА рдЬреНрдпрд╛рдорд┐рддрд┐ рд╕реЗ;
- рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдХреЛ, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдПрдХ рдЕрд╕реАрдорд┐рдд рд╕рдВрдЦреНрдпрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдХреЗрд╡рд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдкреНрд░рджрд░реНрд╢рди рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рдд);
- рдПрдХ рдмрд┐рдВрджреБ рдкрд░ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐, рдпрд╛ "рдкреНрд░рдХрд╛рд╢" рдХреЗ рдПрдХ рдмрдбрд╝реЗ рдЧреБрдгрд╛рдВрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд, рди рдХреЗрд╡рд▓ рдХреНрд╖реЗрддреНрд░ рдХреЛ 100% рд╕реЗ рд░реЛрд╢рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдмрд▓реНрдХрд┐ рдЗрд╕реЗ рд░реЛрд╢рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП;
- рд╕рдм рдХреБрдЫ рдЧрдгрдирд╛ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ;

рдЗрд╕ рд╕рднреА рдХреЗ рд▓рд┐рдП рдУрдкрдирдЬреАрдПрд▓, рдЬреАрдПрд▓рдПрд╕рдПрд▓, рдлреНрд░реЗрдордмрдлрд╝рд░ рддрдХрдиреАрдХ рдФрд░ рдЧрдгрд┐рдд рдХреА рдереЛрдбрд╝реА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдЪреВрдВрдХрд┐ OpenGL 3.3 рдФрд░ GLSL 3.30 рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рддрдХ рд╕реАрдорд┐рдд рд╣реИ рдореЗрд░реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рдЖрдЬ рдХреЗ рдорд╛рдирдХреЛрдВ (GeForce 310) рджреНрд╡рд╛рд░рд╛ рдмрд╣реБрдд рдкреБрд░рд╛рдирд╛ рд╣реИ, рдФрд░ 2 рдбреА рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╕реЗ рдЕрдзрд┐рдХ рд╣реИ (рдФрд░ рдкрд╣рд▓реЗ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдУрдкрдирдЧреНрд▓ рдФрд░ рдЬреАрдПрд▓рдПрд╕рдПрд▓ рдХреЗ рдЕрд╕рдВрдЧрдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдХрд╛рд░рдг рдЕрд╕реНрд╡реАрдХреГрддрд┐ рдХрд╛ рдХрд╛рд░рдг рд╣реИ)ред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╕реНрд╡рдпрдВ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реИ рдФрд░ 3 рдЪрд░рдгреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
- рдПрдХ рдмрдирд╛рд╡рдЯ рдХреЛ рдХрд╛рд▓реЗ рд░реЗрдВрдбрд░ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдЖрдХрд╛рд░ рдореЗрдВ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ рдФрд░ рд╕рднреА рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рдХрд╛рд╢ рдХрд╛рд░рдХ рдЬрдорд╛ рдХрд░рддреЗ рд╕рдордп (рддрдерд╛рдХрдерд┐рдд рдкреНрд░рдХрд╛рд╢ рдорд╛рдирдЪрд┐рддреНрд░) рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░реЗрдВ;
- рджреГрд╢реНрдп рдХреЛ рдПрдХ рдЕрд▓рдЧ рдмрдирд╛рд╡рдЯ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛;
- рд░реЗрдВрдбрд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдХреНрд╡рд╛рдб рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ рдЬреЛ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рдкрд░рд┐рдгрд╛рдореА рдмрдирд╛рд╡рдЯ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдЖрдк рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХреЗ рд╕рд╛рде "рдЪрд╛рд░реЛрдВ рдУрд░ рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВ", рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкрд╛рдиреА / рдЖрдЧ, рд▓реЗрдВрд╕ рд╕реЗ рдЕрдкрд╡рд░реНрддрди рдХреЗ рдкреНрд░рднрд╛рд╡, рд╣рд░ рд╕реНрд╡рд╛рдж рдФрд░ рдЕрдиреНрдп рдкреЛрд╕реНрдЯ-рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд░рдВрдЧ рд╕реБрдзрд╛рд░ред
1. рдкреНрд░рдХрд╛рд╢ рдирдХреНрд╢рд╛
рд╣рдо рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ -
рдЖрд╕реНрдердЧрд┐рдд рдЫрд╛рдпрд╛рдВрдХрди , рдЗрд╕реЗ 2 рдбреА рдореЗрдВ рдкреЛрд░реНрдЯ рдХрд░рдирд╛ (рдкреАрдПрд╕ рдореИрдВ рдорд╛рдлреА рдорд╛рдВрдЧрддрд╛ рд╣реВрдВ, рдЖрд╕реНрдердЧрд┐рдд рдЫрд╛рдпрд╛рдВрдХрди рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдПрдХ
рдЫрд╛рдпрд╛ рдирдХреНрд╢рд╛ , рдореЗрд░рд╛ рдЬрд╛рдо, рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж)ред рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рд╕рд╛рд░ рдХреИрдорд░реЗ рдХреЛ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд▓реЗ рдЬрд╛рдХрд░ рд░реЗрдВрдбрд░ рдХрд░рдирд╛ рд╣реИ, рдПрдХ рдЧрд╣рд░рд╛рдИ рдмрдлрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рд╣реИред рдХреИрдорд░реЗ рдХреЗ рдореИрдЯреНрд░рд┐рд╕ рдФрд░ рд╢реЗрдбрд░ рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рд╕рд╛рде рд╕рд░рд▓ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд╕рд╛рде, рдЖрдк рдмрдлрд░ рдХреЗ рдмрдирд╛рд╡рдЯ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рджреГрд╢реНрдп рдХреЗ рдкрд┐рдХреНрд╕реЗрд▓ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдХреЗ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд┐рдХреНрд╕реЗрд▓ рджреНрд╡рд╛рд░рд╛ рдЫрд╛рдпрд╛рдВрдХрди рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВред 3 рдбреА рдореЗрдВ, рдЬреЗрдб-рдмрдлрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдореИрдВрдиреЗ рд╕реАрдкреАрдпреВ рдкрд░ рдЕрдкрдирд╛ рдПрдХ рдЖрдпрд╛рдореА рдЧрд╣рд░рд╛рдИ рдмрдлрд░ рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдореИрдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рддрд░реНрдХрд╕рдВрдЧрдд рдФрд░ рдЖрд╢рд╛рд╡рд╛рджреА рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛, рдкрд░реНрдпрд╛рдкреНрдд рдкреНрд░рдХрд╛рд╢ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдкрд╛рд╕ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд▓рд╕рд╕ рдФрд░ рдорд┐рдиреНрдпреВрдЬрд╝ рд╣реИрдВред рдмреБрджреНрдзрд┐рд╢реАрд▓рддрд╛ рдХреЗ рджреМрд░рд╛рди, рд╡рд┐рдзрд┐ рдЬреАрд╡рди рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╣рдХрджрд╛рд░ рдереА, рдФрд░ рдореИрдВрдиреЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ред рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдордп рдореБрдЭреЗ
рдЗрд╕ рддрд░рд╣ рд╕реЗ рдорд┐рд▓рд╛ ... рдЕрдЪреНрдЫрд╛ рдУрд╣ рдЕрдЪреНрдЫрд╛, рдПрдХ рд╕рд╛рдЗрдХрд┐рд▓ рдПрдХ рд╕рд╛рдЗрдХрд┐рд▓ рд╣реИред
1.1 рдЬреЗрдб-рдмрдлрд░ рдЙрд░реНрдл тАЛтАЛрдЧрд╣рд░рд╛рдИ рдмрдлрд░
рдЬреЗрдб-рдмрдлрд░ рдХрд╛ рд╕рд╛рд░ рдХреИрдорд░реЗ рд╕реЗ рджреГрд╢реНрдп рддрддреНрд╡ рдХреА рджреВрд░рд╕реНрдерддрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдХрд░реАрдм рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкреАрдЫреЗ рдЕрджреГрд╢реНрдп рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рдХрд╛рдЯрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдпрджрд┐ 3 рдбреА рджреГрд╢реНрдп рдореЗрдВ рдЧрд╣рд░рд╛рдИ рдмрдлрд░ рдПрдХ рд╡рд┐рдорд╛рди рд╣реИ

, рдлрд┐рд░ рд╣рдорд╛рд░реА рд╕рдкрд╛рдЯ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдпрд╣ рдПрдХ рдкрдВрдХреНрддрд┐ рдпрд╛ рдПрдХ рдЖрдпрд╛рдореА рд╕рд░рдгреА рдмрди рдЬрд╛рдПрдЧреАред рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд - рдмрд┐рдВрджреБ, рд╕рднреА рджрд┐рд╢рд╛рдУрдВ рдореЗрдВ рдХреЗрдВрджреНрд░ рд╕реЗ рдкреНрд░рдХрд╛рд╢ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрдиред рддрджрдиреБрд╕рд╛рд░, рдмрдлрд░ рдЗрдВрдбреЗрдХреНрд╕ рдФрд░ рдореВрд▓реНрдп рд╕реНрд░реЛрдд рдХреЗ рдирд┐рдХрдЯрддрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕реНрдерд╛рди рдХреЗ рдзреНрд░реБрд╡реАрдп рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдВрдЧреЗред рдореИрдВрдиреЗ рдмрдлрд░ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдЖрдиреБрднрд╡рд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдореИрдВ 1024 рдкрд░ рдмрдВрдж рд╣реЛ рдЧрдпрд╛ (рдмреЗрд╢рдХ, рдпрд╣ рдЦрд┐рдбрд╝рдХреА рдХреЗ рдЖрдХрд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ)ред рдЫреЛрдЯреЗ рдмрдлрд░ рдЖрдпрд╛рдо, рд╡рд╕реНрддреБ рдХреА рд╕реАрдорд╛ рдФрд░ рдкреНрд░рдмреБрджреНрдз рдХреНрд╖реЗрддреНрд░ рдХреЗ рдмреАрдЪ рдХреА рд╡рд┐рд╕рдВрдЧрддрд┐ рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдЧреА, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЫреЛрдЯреА рд╡рд╕реНрддреБрдУрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдФрд░ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп рдХрд▓рд╛рдХреГрддрд┐рдпрд╛рдВ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддреА рд╣реИрдВ:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда рдмрдлрд░ рдПрд▓реНрдЧреЛрд░рд┐рдердо:
- рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рддреНрд░рд┐рдЬреНрдпрд╛ рдХреЗ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рднрд░реЗрдВ (рдЬрд┐рд╕ рджреВрд░реА рдкрд░ рдкреНрд░рдХрд╛рд╢ рдХреА рддреАрд╡реНрд░рддрд╛ рд╢реВрдиреНрдп рддрдХ рдкрд╣реБрдВрдЪрддреА рд╣реИ);
- рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рддреНрд░рд┐рдЬреНрдпрд╛ рдореЗрдВ рд╕реНрдерд┐рдд рдкреНрд░рддреНрдпреЗрдХ рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП, рдЙрди рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рд▓реЗрдВ рдЬреЛ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рд╕рд╛рдордиреЗ рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдХрд┐рдирд╛рд░реЛрдВ рдХреЛ рдкреАрдЫреЗ рдХреА рддрд░рдл рдШреБрдорд╛рддреЗ рд╣реИрдВ, рддреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдЕрдкрдиреЗ рдЖрдк рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рд╕рд╛рде рдЦрдбрд╝реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реЛрдЧреА:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда
- рдХрд┐рдирд╛рд░реЛрдВ рдХреА рдкрд░рд┐рдгрд╛рдореА рд╕реВрдЪреА рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░реЗрдВ, рдЙрдирдХреЗ рдХрд╛рд░реНрдЯреЗрд╢рд┐рдпрди рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдзреНрд░реБрд╡реАрдп рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВред рдкреБрдирд░реНрдЧрдгрдирд╛ рдмрд┐рдВрджреБ (x; y) рдореЗрдВ (); r):
╧Ж = arccos (xAxis тАв рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд░реЗрдВ (рдмрд┐рдВрджреБ))
рдЬрд╣рд╛рдВ:
тАв - рд╡реИрдХреНрдЯрд░ рдХреЗ рд╕реНрдХреЗрд▓рд░ рдЙрддреНрдкрд╛рдж;
рдПрдХреНрд╕рдПрдХреНрд╕рд┐рд╕ рдПрдХреНрд╕ рдЕрдХреНрд╖ (1; 0) рдХреЗ рдЕрдиреБрд░реВрдк рдЗрдХрд╛рдИ рд╡реЗрдХреНрдЯрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд░реНрдХрд▓ рдХреЗ рдХреЗрдВрджреНрд░ рд╕реЗ рдмрд┐рдВрджреБ рдХреЗ рджрд╛рдИрдВ рдУрд░ 0 рдбрд┐рдЧреНрд░реА;
рдмрд┐рдВрджреБ - рдХрд┐рдирд╛рд░реЗ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдмрд┐рдВрджреБ рддрдХ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рдХреЗрдВрджреНрд░ рд╕реЗ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдПрдХ рд╡реЗрдХреНрдЯрд░ (рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рд╕рдордиреНрд╡рдп рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдмрд┐рдВрджреБ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ);
normalize - рд╡реЗрдХреНрдЯрд░ рдХрд╛ рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг;
рдЖрд░ = | рдмрд┐рдВрджреБ | - рдмрд┐рдВрджреБ рддрдХ рджреВрд░реА;
рд╣рдо рдХрд┐рдирд╛рд░реЗ рдФрд░ рдордзреНрдпрд╡рд░реНрддреА рдХреЗ рджреЛ рдЪрд░рдо рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЕрдВрдХрди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЕрдВрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдкреНрд░рдХреНрд╖реЗрдкрдг рджреНрд╡рд╛рд░рд╛ рдХрд╡рд░ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдмрдлрд░ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред
рдХреЛрдг of рдХреЗ рдЕрдиреБрд░реВрдк рдмрдлрд░ рд╕реВрдЪрдХрд╛рдВрдХ рдХреА рдЧрдгрдирд╛:
рд╕реВрдЪрдХрд╛рдВрдХ = Buff / (2 * *) * рдмрдлрд░ рдЖрдХрд╛рд░;
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдХрд┐рдирд╛рд░реЗ рдХреЗ рдЪрд░рдо рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк рдмрдлрд░ рдХреЗ рджреЛ рдЪрд░рдо рд╕реВрдЪрдХрд╛рдВрдХ рдкрд╛рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рдордзреНрдпрд╡рд░реНрддреА рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд▓рд┐рдП, рдХреЛрдг рдореВрд▓реНрдп рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░реЗрдВ:
╧Ж = рд╕реВрдЪрдХрд╛рдВрдХ * 2 * er / рдмрдлрд░ рдЖрдХрд╛рд░
, рд╣рдо рдЗрд╕ рдХреЛрдг рдкрд░ (0; 0) рд╕реЗ рдПрдХ рд╡реЗрдХреНрдЯрд░ рдЦрдВрдб рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреА рд▓рдВрдмрд╛рдИ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреЗ рддреНрд░рд┐рдЬреНрдпрд╛ рдХреЗ рдмрд░рд╛рдмрд░ рдпрд╛ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред
v = vec2 (cos (╧Ж), sin ())) * рддреНрд░рд┐рдЬреНрдпрд╛
рдФрд░ рдкреНрд░рд╛рдкреНрдд рдЦрдВрдб рдФрд░ рдХрд┐рдирд╛рд░реЗ рдХреЗ рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди рдмрд┐рдВрджреБ рдХреЛ рдЦреЛрдЬреЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:
- рдЧреБрдгрд╛рдВрдХ рдП 1 , рдмреА 1 , рд╕реА 1 рдФрд░ рдП 2 , рдмреА 2 , рд╕реА 2 рдХреЗ рд╕рд╛рде 2 рд▓рд╛рдЗрдиреЗрдВ

- рд╕рдореАрдХрд░рдгреЛрдВ рдХреА рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Cramer рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдореЗрдВ рдкреНрд░рддрд┐рдЪреНрдЫреЗрджрди рдмрд┐рдВрджреБ рдорд┐рд▓рддрд╛ рд╣реИ:


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

рдмрд╣реБрднреБрдЬ рдкрд╣рд▓реЗ рдмрд┐рдВрджреБ, рдкрд┐рдЫрд▓реЗ рдФрд░ рд╡рд░реНрддрдорд╛рди рд╕реЗ рдмрдирддрд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдкрд╣рд▓рд╛ рдмрд┐рдВрджреБ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХрд╛ рдХреЗрдВрджреНрд░ рд╣реИ, рдФрд░ рд╢реЗрд╖ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ:
for( unsigned int index = 0; index < bufferSize; ++index ) { float alpha = float( index ) / float( bufferSize ) * Math::TWO_PI; float value = buffer[ index ]; Vec2 point( Math::Cos( alpha ) * value, Math::Sin( alpha ) * value ); Vec4 pointColor( color.R. color.G, color.B, ( 1.0f - value / range ) * color.A ); ... }
рдФрд░ рд╢реВрдиреНрдп рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд░рдХреЗ рдЪреЗрди рдХреЛ рдмрдВрдж рдХрд░реЗрдВред рд╕рднреА рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рд░рдВрдЧ рдЪрдордХ
рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдореВрд▓реНрдп рдореЗрдВ рдЕрдВрддрд░ рдХреЗ рдмрд╛рдж рд╕рдорд╛рди рд╣реИ - рдХреЗрдВрджреНрд░ рдореЗрдВ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд (рд░реЗрдВрдЬ) 0.0 рдХреЗ рддреНрд░рд┐рдЬреНрдпрд╛ рдкрд░ рдЕрдзрд┐рдХрддрдо рдЪрдордХ рд╣реИред рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдореВрд▓реНрдп рд╕реНрд░реЛрдд рдХреЗ рдХреЗрдВрджреНрд░ рд╕реЗ рдПрдХ рдмрд┐рдВрджреБ рдХреА рджреВрд░реА рдХреЗ рд╕рдВрдХреЗрддрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЯреБрдХрдбрд╝рд╛ shader рдореЗрдВ рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдмрдирд╛рд╡рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдПрдХ рдХреЗ рд╕рд╛рде рджреВрд░реА рдкрд░ рд░реЛрд╢рдиреА рдХреА рд░реИрдЦрд┐рдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рд╕реНрддрд░ рдкрд░, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдореВрд▓реНрдп рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЬрдмрд░рди рдордВрдж рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИ, рддрд╛рдХрд┐ рдЬрд┐рд╕ рд╕рддрд╣ рдкрд░ рдХрд┐рд░рдгреЗрдВ рдЧрд┐рд░реЗрдВ, рд╡рд╣ рдкреНрд░рдмреБрджреНрдз рд╣реЛ, рдПрдХ рдорд╛рддреНрд░рд╛ рдХрд╛ рд░реВрдк рдмрдирд╛ рд▓реЗред
1.3 рдлрд╝реНрд░реЗрдордмрдлрд╝рд░
рдлрд╝реНрд░реЗрдордмрдлрд╝рд░ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдмрд╕ рдПрдХ рдмрдирд╛рд╡рдЯ - GL_RGBA16F рдкреНрд░рд╛рд░реВрдк рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдпрд╣ рдкреНрд░рд╛рд░реВрдк рдЖрдкрдХреЛ [0.0 рдХреЗ рдмрд╛рд╣рд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛; 1.0] рдЖрдзреЗ-рд╕рдЯреАрдХ рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдХреА рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рдеред
'рдЫрджреНрдо рдХреЛрдб' рдХрд╛ рдПрдХ рд╕рд╛ GLuint textureId; GLuint frameBufferObject;
рдмрдлрд░ рдХреЛ рдмрд╛рдВрдзреЗрдВ, additive рдорд┐рд╢реНрд░рдг glBlendFunc (GL_ONE, GL_ONE) рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░ рд░реЛрд╢рди рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ "рдбреНрд░рд╛" рдХрд░реЗрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рд░реЛрд╢рдиреА рдХреА рдбрд┐рдЧреНрд░реА рдЬрдорд╛ рдХрд░реЗрдЧрд╛ред рдЖрдк рд╕рдВрдкреВрд░реНрдг рд╡рд┐рдВрдбреЛ рдореЗрдВ рдПрдХ рдХреНрд╡рд╛рдб рдбреНрд░рд╛рдЗрдВрдЧ рдХрд░рдХреЗ рд╡реИрд╢реНрд╡рд┐рдХ рдкреНрд░рдХрд╛рд╢ рд╡реНрдпрд╡рд╕реНрдерд╛ рднреА рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
1.4 рд╢реЗрдб
рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдХрд┐рд░рдгреЛрдВ рдХреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбреНрд╕ рдорд╛рдирдХ рд╣реИрдВ, рдХреИрдорд░реЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдФрд░ рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ рд╣рдо рд░рдВрдЧ рдХреА рдЪрдордХ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдЬрдорд╛ рдХрд░рддреЗ рд╣реИрдВ:
layout(location = 0) out vec4 fragData; in vec4 vColor; ... void main() { fragData = vColor * vColor.a; }
рдЕрдВрдд рдореЗрдВ, рд╣рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдорд┐рд▓рдирд╛ рдЪрд╛рд╣рд┐рдП:

2. рджреГрд╢реНрдп рдХреЛ рдмрдирд╛рд╡рдЯ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛
рджреГрд╢реНрдп рдХреЛ рдПрдХ рдЕрд▓рдЧ рдмрдирд╛рд╡рдЯ рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдПрдХ рдФрд░ рдлреНрд░реЗрдо рдмрдлрд╝рд░ рдмрдирд╛рддреЗ рд╣реИрдВ, рд╕рд╛рдорд╛рдиреНрдп GL_RGBA рдмрдирд╛рд╡рдЯ рд╕рдВрд▓рдЧреНрди рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддреЗ рд╣реИрдВред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдХреБрдЦреНрдпрд╛рдд рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдорд░ рд╕реЗ рдРрд╕рд╛ рджреГрд╢реНрдп рд╣реИ:

3. рджреГрд╢реНрдп рдХреЗ рд╕рд╛рде рдкреНрд░рдХрд╛рд╢ рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛ рд╕рдВрдпреЛрдЬрди
рдЯреБрдХрдбрд╝рд╛ shader рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
uniform sampler2D texture0; uniform sampler2D texture1; ... vec4 color0 = texture( texture0, texCoords );
рдХрд╣реАрдВ рднреА рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдВ, рдЧреБрдгрд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЧреБрдгрд╛рдВрдХ рдХреЛ рджреГрд╢реНрдп color0 рдХреЗ рд░рдВрдЧ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЕрдЧрд░ рдЦреЗрд▓ рдХреА рд╕реЗрдЯрд┐рдВрдЧ рдмреЗрд╣рдж рдЕрдВрдзреЗрд░рд╛ рд╣реИ рдФрд░ рдкреНрд░рдХрд╛рд╢ рдХреА рдХрд┐рд░рдгреЛрдВ рдХреЛ рджреЗрдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда fragData0 = ( color0 + vec4( 0.05, 0.05, 0.05, 0.0 ) ) * color1;
рдФрд░ рдлрд┐рд░ ...

рдпрджрд┐ рдЪрд░рд┐рддреНрд░ рдХреЛ рд╕рд░рд▓ рдЬреНрдпрд╛рдорд┐рддрд┐ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЗрд╕рдореЗрдВ рд╕реЗ рдЫрд╛рдпрд╛ рдмрд╣реБрдд, рдмрд╣реБрдд рдЧрд▓рдд рд╣реЛрдЧреАред рдЫрд╛рдпрд╛рдПрдВ рдЬреНрдпрд╛рдорд┐рддрд┐ рд╕реЗ рдирд┐рд░реНрдорд┐рдд рд╣реЛрддреА рд╣реИрдВ, рдХреНрд░рдорд╢рдГ рд╕реНрдкреНрд░рд╛рдЗрдЯ рд╡рд░реНрдг рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рд╡рд░реНрдЧ (рд╣рдореНрдо, рдФрд░ рдорд┐рдЯрдмреЙрдп) рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИрдВ, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡рд┐рдЪрд╛рд░ рд╡рд░реНрдЧ рд╕реЗ рд╣реИ?)ред рддреЛ рд╕реНрдкреНрд░рд╛рдЗрдЯ рдмрдирд╛рд╡рдЯ рдХреЛ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ рдХрд┐рдирд╛рд░реЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЗ рдХреБрдЫ рдкрд╛рд░рджрд░реНрд╢реА рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдЪреМрдХреЛрд░ рдмрдирд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╣ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдХреНрдпрд╛ рдХреЛрдиреЛрдВ рдХреЛ рдЪрд┐рдХрдирд╛ рдХрд░рдХреЗ рдЪрд░рд┐рддреНрд░ рдХреА рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдиреАрдореЗрд╢рди рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдлреНрд░реЗрдо рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдЬреНрдпрд╛рдорд┐рддрд┐ рдирд╣реАрдВ рд╣реИ? рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдиреЗ рдХреЛрдиреЛрдВ рдХреЛ рдЪрд┐рдХрдирд╛ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдЕрдм рдЪрд░рд┐рддреНрд░ рд▓рдЧрднрдЧ рдПрдХ рджреАрд░реНрдШрд╡реГрддреНрдд рд╣реИред рдпрджрд┐ рджреГрд╢реНрдп рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрдВрдзреЗрд░рд╛ рд╣реИ, рддреЛ рдРрд╕реА рдЫрд╛рдпрд╛ рд╣рдбрд╝рддрд╛рд▓реА рд╣реИред рд▓рд╛рдЗрдЯрд┐рдВрдЧ рдореИрдк рдФрд░ рдЧреНрд▓реЛрдмрд▓ рд▓рд╛рдЗрдЯрд┐рдВрдЧ рдХреЛ рд╕реБрдЪрд╛рд░реВ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рдирд╛, рдЪрд┐рддреНрд░ рдЕрдзрд┐рдХ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ:
vec2 offset = oneByWindowCoeff.xy * 1.5f;
рдЬрд╣рд╛рдБ oneByWindowCoeff рдкрд┐рдХреНрд╕реЗрд▓ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЛ рдЯреЗрдХреНтАНрд╕реЗрд▓ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧреБрдгрд╛рдВрдХ рд╣реИред
рд╡реИрд╢реНрд╡рд┐рдХ рд░реЛрд╢рдиреА рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ "рдкрд╛рддреНрд░реЛрдВ" рдХреЗ рд▓рд┐рдП рдЫрд╛рдпрд╛ рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рдпрд╛ рдЙрдиреНрд╣реЗрдВ рдЦреБрдж рдХреЛ рдЪрдордХ (рдПрдХ рдЖрджрд░реНрд╢ рд╡рд┐рдХрд▓реНрдк, рдореЗрд░реА рд░рд╛рдп рдореЗрдВ) рдмрдирд╛рдирд╛, рдпрд╛ рднреНрд░рдорд┐рдд рд╣реЛрдирд╛ рдФрд░ рд╕рднреА рдПрдирд┐рдореЗрд╢рди рдХреЗ рд▓рд┐рдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА рдЬреНрдпрд╛рдорд┐рддрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдкреНрд░рджрд░реНрд╢рди рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЬреЛ рдЗрди рд╕рднреА рдкреНрд░рддрд┐рдмрд┐рдВрдмреЛрдВ рдФрд░ рдкреВрд░реНрдгрддрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдирд┐рдХрд▓рд╛:
4. рдЕрдиреБрдХреВрд▓рди
рдЬреИрд╕рд╛ рдХрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, "рдкрд╣рд▓реЗ рд▓рд┐рдЦреЗрдВ, рдФрд░ рдлрд┐рд░ рдЕрдиреБрдХреВрд▓рди рдХрд░реЗрдВред" рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреЛрдб рдЬрд▓реНрджреА рдФрд░ рдореЛрдЯреЗ рддреМрд░ рдкрд░ рд╕реНрдХреЗрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЬрдЧрд╣ рдереАред рдкрд╣рд▓реА рдмрд╛рдд рдЬреЛ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрдИ, рд╡рд╣ рдереА рдмрд╣реБ-рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдмрд╣реБрд╕рдВрдЦреНрдпрдХреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рдЬреЛ рд░реЛрд╢рдиреА рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рдХреА рддреНрд░рд┐рдЬреНрдпрд╛ рдореЗрдВ рдХреЛрдИ рдмрд╛рдзрд╛рдПрдВ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ рдХрд┐ 1000+ рдмрд╣реБрднреБрдЬ рдЦреАрдВрдЪреЗ, рд╣рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдкреВрд░реНрдг рдЪрдХреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЖрдВрдЦ рдХреЛ рдмрд╕ рдЕрдВрддрд░ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ (рдпрд╛ рд╢рд╛рдпрдж рдпрд╣ рдореЙрдирд┐рдЯрд░ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдЧрдВрджрд╛ рд╣реИ)
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдиреБрдХреВрд▓рди рдХреЗ рдмрд┐рдирд╛ рдЖрдпрд╛рдо 1024 рдХреА рдЧрд╣рд░рд╛рдИ рдмрдлрд░ рдХреЗ рд▓рд┐рдП:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда рдФрд░ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда рд╕реНрдерд┐рд░ рд╡рд╕реНрддреБрдУрдВ рдХреА рдмрд╣реБрддрд╛рдпрдд рд╡рд╛рд▓реЗ рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкреНрд░рдХреНрд╖реЗрдкрдг рдХреЛ рдмрдлрд░ рдореЗрдВ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдХреИрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдПрдХ рдЕрдЪреНрдЫреА рд╡реГрджреНрдзрд┐ рджреЗрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЙрд╢рди / рдЬрдбрд╝реЗрдВ рдФрд░ рдЕрдиреНрдп рдорд╣рдВрдЧреЗ рдЧрдгрд┐рдд рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИред рддрджрдиреБрд╕рд╛рд░, рдкреНрд░рддреНрдпреЗрдХ рдмрдлрд╝рд░ рдХреЗ рд▓рд┐рдП, рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдкреЙрдЗрдВрдЯрд░реНрд╕ рдХреА рдПрдХ рд╕реВрдЪреА рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдерд┐рддрд┐ рдпрд╛ рдЖрдХрд╛рд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдпрд╛ рддреЛ рдХреИрд╢ рдХреЛ рд╕реАрдзреЗ рдмрдлрд░ рдореЗрдВ рднрд░рддреЗ рд╣реИрдВ рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреБрди: рд▓рд┐рдЦрддреЗ рд╣реИрдВред
5. рдирд┐рд╖реНрдХрд░реНрд╖
рдпрд╣ рдкреНрд░рдХрд╛рд╢ рддрдХрдиреАрдХ рдЗрд╖реНрдЯрддрдо, рддреЗрдЬ рдФрд░ рд╕рдЯреАрдХ рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рд▓рдХреНрд╖реНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рддрдереНрдп рдерд╛ред рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрдХрдиреАрдХреЗрдВ рд╣реИрдВ, рдЬреИрд╕реЗ рдЕрдХреЗрд▓реЗ рдЫрд╛рдпрд╛ рдирд┐рд░реНрдорд╛рдг (рдкреНрд░рдХрд╛рд╢, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдЗрд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ рдмрдВрдж рд╣реИ),
рд▓реЗрдХрд┐рди рдирд░рдо ,
рдмрд╣реБрдд рд╕рд╛рд░реА рдЧрдгрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде, рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐
рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЕрддреНрдпрдВрдд рдордиреЛрд░рдВрдЬрдХ рдПрдХ , рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рддрд░реНрдХ рд╕рдорд╛рди рд╣реИ рдореИрдВрдиреЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛)ред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЬреЛ рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рдереА, рд╡рд╣ рдорд╣рд╕реВрд╕ рдХреА рдЧрдИ рдереА, рд╡рд╕реНрддреБрдУрдВ рдиреЗ рдЫрд╛рдпрд╛ рдбрд╛рд▓реА, рдЦреЗрд▓ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рджрдордирдХрд╛рд░реА рд╡рд╛рддрд╛рд╡рд░рдг рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рдореЗрдВ рдЪрд┐рддреНрд░ рдЕрдзрд┐рдХ рд╕реБрдЦрдж рдмрди рдЧрдпрд╛ред
6. рд╕рдиреНрджрд░реНрдн