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

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

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реА рдзрд╛рд░рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрдпрд╛, рдкреНрд░рднрд╛рд╡ рдмреЗрд╣рддрд░ рдЪрд┐рддреНрд░ рдЧреБрдгрд╡рддреНрддрд╛ рдХреЗ рд╕рд╛рде, рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЦрд░рд╛рдм рд▓рдЧ рд░рд╣рд╛ рдерд╛ред
рдпрд╣ рдПрдХ рдореГрдд рдЕрдВрдд рдмрди рдЧрдпрд╛ред рдореБрдЭреЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдореЗрд░реА рдЖрдБрдЦреЛрдВ рдореЗрдВ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреА рдЧрдгрдирд╛ рдореЗрдВ рд╕реАрдкреАрдпреВ рд╕реНрд╡рдпрдВ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ рд╣реИред рдкрд░реНрджрд╛ред
рдкрд╛рдЪрди рдХреНрд░рд┐рдпрд╛ резрдкрд┐рдЫрд▓реЗ рдПрдХ рджрд╢рдХ рдореЗрдВ, рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдпреЛрдЬрди рдХреЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд▓рдЧрднрдЧ рдХреЛрдИ рдкреНрд░рдЧрддрд┐ рдирд╣реАрдВ рд╣реБрдИ рд╣реИред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдкрд░реНрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрдзрд┐рдХрддрдо рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рд╡реГрджреНрдзрд┐ рдкреНрд░рддрд┐ рдХреЛрд░ 30% рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИред рдкреНрд░рдЧрддрд┐, рдЗрд╕реЗ рд╣рд▓реНрдХреЗ рдврдВрдЧ рд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирдЧрдгреНрдп рд╣реИред рдпрджрд┐ рд╣рдо рд╡реЗрдХреНрдЯрд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреА рд▓рдВрдмрд╛рдИ, рдФрд░ рдХрдиреНрд╡реЗрдпрд░ рдмреНрд▓реЙрдХреЛрдВ рдХреЗ рдХреБрдЫ рддреНрд╡рд░рдг рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХрд╛рдордХрд╛рдЬреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рд╣реИред рдереНрд░реЗрдбреНрд╕ рдХреЗ рд╕рд╛рде рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд╛рдо рдЕрднреА рднреА рдПрдХ рдЦреБрд╢реА рд╣реИ, рдФрд░ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдорд╛рдирд╛рдВрддрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдХреЛрд░ рд░рдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛, рднрд▓реЗ рд╣реА рд╡рд╣ 5-10 рд╕реЗ рдЕрдзрд┐рдХ рддреЗрдЬ рд╣реЛ, рд▓реЗрдХрд┐рди рдЕрдлрд╕реЛрд╕ рдФрд░ рдУрд╣, рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВред
рдпрд╣рд╛рдБ рд╣реИрдмреЗ рдкрд░ рд▓реЗрдЦ
"рдбрд╛рд░реНрдХ" рд╕рд┐рд▓рд┐рдХреЙрди рдХреЗ рдпреБрдЧ рдореЗрдВ рдЬреАрд╡рди рдХреА рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИ
, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЖрд╡рд╢реНрдпрдХ рд╢рд░реНрддреЗрдВ рдмрддрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕реНрд╡рд░реНрдЧ рд╕реЗ рдкреГрдереНрд╡реА рдкрд░ рднреА рд▓реМрдЯрддреА рд╣реИред рдЕрдЧрд▓реЗ рджрд╢рдХ рдореЗрдВ, рдЖрдк рдкреНрд░рддрд┐ рдХреЛрд░ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рдореЗрдВ рдХреЛрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡реГрджреНрдзрд┐ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдо GPU рдХреЛрд░ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЙрдирдХреЗ рд╕рдордЧреНрд░ рддреНрд╡рд░рдг рдХреЗ рдЖрдЧреЗ рд╡рд┐рдХрд╛рд╕ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореЗрд░реЗ рдкреБрд░рд╛рдиреЗ рд▓реИрдкрдЯреЙрдк рдкрд░ рднреА, рдЕрдиреБрдорд╛рдирд┐рдд рдХреБрд▓ GPU рдкреНрд░рджрд░реНрд╢рди рдПрдХ рд╕реАрдкреАрдпреВ рдзрд╛рдЧреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 20 рдЧреБрдирд╛ рдЕрдзрд┐рдХ рд╣реИред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдк рд╕рднреА 4 рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛрд░ рдХреЛ рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рднреА рд╣рдо рдЬрд┐рддрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ рдЙрддрдирд╛ рдХрдо рд╣реИред
рдореИрдВ рдЕрддреАрдд рдХреЗ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╢реНрд░рджреНрдзрд╛рдВрдЬрд▓рд┐ рджреЗрддрд╛ рд╣реВрдВ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рддреНрд╡рд░рдХ, рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрд╡рд╛рдореА рдХреЗ рдмрд┐рдирд╛ рдЕрдкрдиреА рдЙрддреНрдХреГрд╖реНрдЯ рдХреГрддрд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдпрд╛ред
рддреЛ, рд╣рдо GPU рдХреЗ рд╕рд╛рде рд╕реМрджрд╛ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдерд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдХреБрдЫ рд▓реЛрдЧ рдмрд╕ рдмрд╣реБрднреБрдЬ рдХреЛ рдЖрдХрд╛рд░ рдореЗрдВ рдмрд┐рдЦреЗрд░рддреЗ рд╣реИрдВред рд╕рднреА рджрд┐рд▓рдЪрд╕реНрдк рдЪреАрдЬреЗрдВ
рд╢реЗрдбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдИ рдЧрдИ рд╣реИрдВред рд╕рдорд╛рдкреНрдд 3 рдбреА рдЗрдВрдЬрдиреЛрдВ рдХреЛ рддреНрдпрд╛рдЧрдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреЗ рдЙрддрд╛рд░-рдЪрдврд╝рд╛рд╡ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдЧрд╣рд░реЗ рд╕реНрддрд░ рдкрд░ рд╣реИред рдПрдХ рд╣реА рдкреНрд░реЛрд╕реЗрд╕рд░ рдПрдХ рд╣реА рдХреЛрдбрд╛рдВрддрд░рдХ рд╣реИрдВ, рдХреЗрд╡рд▓ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдХреБрдЫ рдЫрдВрдЯрдиреА рд╕реЗрдЯ рдФрд░ рдХрд╛рдо рдХреА рдЕрдкрдиреА рдЦреБрдж рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВред рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рдореИрдВ
рдЬреАрдПрд▓рдПрд╕рдПрд▓ рдореЗрдВ рдмрдВрдж рд╣реЛ рдЧрдпрд╛, рд╕реА-рдЬреИрд╕реЗ рд╕рд┐рдВрдЯреИрдХреНрд╕, рд╕рд╛рджрдЧреА, рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рд╕рдмрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг, рдЬрд┐рд╕рдореЗрдВ рд╣рдмрд░ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред
рдЪреВрдБрдХрд┐ рдореИрдВ рдЬреНрдпрд╛рджрд╛рддрд░
рдкрд╛рд╕реНрдХрд▓ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ
рдЖрджреА рдерд╛ , рдЗрд╕рд▓рд┐рдП рдХрд╛рд░реНрдп рдерд╛ рдХрд┐ рдУрдкрдирдЧреИрд▓ рдХреЛ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдП
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдПред рдореИрдВ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рдЦреЛрдЬрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛:
GLFW рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░
dglOpenGL рд╣реИрдбрд░ рдлрд╝рд╛рдЗрд▓ред рдХреЗрд╡рд▓ рдкрд╣рд▓реА рдЪреАрдЬ рдореЗрдВ рдореИрдВ рд╢реЗрдбреНрд╕ рдХреЛ рдЬреЛрдбрд╝ рдирд╣реАрдВ рд╕рдХрд╛, рд▓реЗрдХрд┐рди рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рд╣рд╛рдереЛрдВ рдХреА рд╡рдХреНрд░рддрд╛ рд╕реЗ рд╣реИред
рдкрд╛рдЪрди реирдХрдИ рджреЛрд╕реНрдд рдореБрдЭрд╕реЗ рдкреВрдЫрддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВ рдкрд╛рд╕реНрдХрд▓ рдореЗрдВ рдХреНрдпреЛрдВ рд▓рд┐рдЦрддрд╛ рд╣реВрдВ? рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдПрдХ рд▓реБрдкреНрддрдкреНрд░рд╛рдп рднрд╛рд╖рд╛ рд╣реИ, рдЗрд╕рдХрд╛ рд╕рдореБрджрд╛рдп рд▓рдЧрд╛рддрд╛рд░ рдЧрд┐рд░ рд░рд╣рд╛ рд╣реИ, рд▓рдЧрднрдЧ рдХреЛрдИ рд╡рд┐рдХрд╛рд╕ рдирд╣реАрдВ рд╣реИред рдирд┐рдореНрди рд╕реНрддрд░ рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдЗрдВрдЬреАрдирд┐рдпрд░ C, рдФрд░ Java, Python, Ruby, рдпрд╛ рдЬреЛ рднреА рдЕрднреА рдЕрдкрдиреЗ рдЪрд░рдо рдкрд░ рд╣реИрдВ, рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред
рдореЗрд░реЗ рд▓рд┐рдП, рдкрд╛рд╕реНрдХрд▓ рдкрд╣рд▓реЗ рдкреНрдпрд╛рд░ рдХреЗ рд╕рдорд╛рди рд╣реИред рджреЛ рджрд╢рдХ рдкрд╣рд▓реЗ,
рдЯрд░реНрдмреЛ рдкрд╛рд╕реНрдХрд▓ 5.5 рдХреЗ рджрд┐рдиреЛрдВ рдореЗрдВ, рдпрд╣ рдореЗрд░реА рдЖрддреНрдорд╛ рдореЗрдВ рдбреВрдм рдЧрдпрд╛ рдФрд░ рддрдм рд╕реЗ рдореЗрд░реЗ рд╕рд╛рде рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рдбреЗрд▓реНрдлреА рд╣реЛ рдпрд╛ рд╣рд╛рд▓ рдХреЗ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ
рд▓рд╛рдЬрд╝рд░ ред рдореБрдЭреЗ рднрд╛рд╖рд╛ рдХреА рдкреВрд░реНрд╡рд╛рдиреБрдореЗрдпрддрд╛, рд╕рд╛рдкреЗрдХреНрд╖ рдирд┐рдореНрди рд╕реНрддрд░ (рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдирд╛ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдирд┐рд░реНрджреЗрд╢ рдХреЛ рджреЗрдЦрдирд╛) рдкрд╕рдВрдж рд╣реИ, рд╕реА рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ред рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдб рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд┐рдирд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдлреИрд╢рдиреЗрдмрд▓ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдкреБрд░рд╛рдирд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ, рдпрд╣ рдмрдХрд╡рд╛рд╕ рд╣реИред рдЕрдлрд╡рд╛рд╣ рдпрд╣ рд╣реИ, рдРрд╕реЗ рд▓реЛрдЧ рд╣реИрдВ рдЬреЛ рдЕрднреА рднреА
LISP рдкрд░ рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ рдЖрдзреА рд╕рджреА рдХреЗ рд▓рд┐рдПред
рддреЛ, рдЪрд▓реЛ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рдПрдБред рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХрджрдо рдХреЗ рд▓рд┐рдП, рд╣рдо рдЫрд╛рдпрд╛рдВрдХрди рдХреЗ рд╕рдЯреАрдХ рдпрдерд╛рд░реНрдерд╡рд╛рджреА рдореЙрдбрд▓ рдирд╣реАрдВ рд▓реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЬреЛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╣реА рдХреЛрд╢рд┐рд╢ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ, рдЙрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди GPU рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд╕рд╛рде, рддрд╛рдХрд┐ рдПрдХ рд╕реНрдкрд╖реНрдЯ рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдмрд╛рдд рдХреА рдЬрд╛ рд╕рдХреЗред
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рддреНрд░рд┐рдХреЛрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд▓рдЧрднрдЧ рдЗрд╕ рдЖрдХреГрддрд┐ рдХреА рдЫрд╛рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛ред

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

рдпрджрд┐ рдЖрдк рд╕реНрдХреНрд░реАрди рдХреА рд╕реАрдорд╛рдУрдВ рд╕реЗ рдкрд░реЗ рддреНрд░рд┐рдХреЛрдг рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдпрд╣ рд╣реИ:

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

рдкрд░рд┐рдгрд╛рдо рдмреЗрд╣рддрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдЕрдкреНрд░рд╛рдХреГрддрд┐рдХ рджрд┐рдЦрддрд╛ рд╣реИред

рдирд░рдорддрд╛ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрдХрд▓ рдХреЛ рдереЛрдбрд╝рд╛ рдЪрд┐рдХрдирд╛ рдХрд░реЗрдВ, рдФрд░ рд░реИрдЦрд┐рдХ рд╕реЗ рд╢рдХреНрддрд┐ рдореЗрдВ рдврд╛рд▓ рдХрд╛ рд░реВрдк рднреА рдмрджрд▓реЗрдВред

рдпрд╣ рдПрдХ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдкрд░рд┐рдгрд╛рдо рд╣реИред
рдФрд░ рдЕрдВрдд рдореЗрдВ, рдкреНрд░рдкрддреНрд░ рдореЗрдВ рдмрд╛рдзрд╛рдУрдВ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВред

рд╢реЗрдбрд░ рдХреЛрдб//
#version 330 core
layout (location = 0) in vec2 aVertexPosition;
void main(void) {
gl_Position = vec4(aVertexPosition.xy, 0, 1.0);
}
//
#version 330 core
layout (points) in;
layout (triangle_strip, max_vertices = 5) out;
uniform mat4 uModelViewMatrix;
uniform float uRadius;
uniform vec2 uHeroPoint;
out float fTransparency;
out vec2 vCenter;
void main(){
vCenter = gl_in[0].gl_Position.xy;
vec2 d = uHeroPoint - vCenter;
float l = length(d);
float i = uRadius / l;
float ii = i*i;
float ij = i * sqrt(1 - ii);
vec2 p1 = vec2(vCenter.x + dx*ii - dy*ij , vCenter.y + dx*ij + dy*ii);
vec2 p2 = vec2(vCenter.x + dx*ii + dy*ij , vCenter.y - dx*ij + dy*ii);
d = uHeroPoint - p1;
vec2 p3 = vec2(p1 - d/length(d)*1000000);
d = uHeroPoint - p2;
vec2 p4 = vec2(p2 - d/length(d)*1000000);
fTransparency = 0;
gl_Position = uModelViewMatrix * vec4(p1, 0, 1);
EmitVertex();
fTransparency = 1;
gl_Position = uModelViewMatrix * vec4(p3, 0, 1);
EmitVertex();
gl_Position = uModelViewMatrix * vec4(vCenter, 0, 1);
EmitVertex();
gl_Position = uModelViewMatrix * vec4(p4, 0, 1);
EmitVertex();
fTransparency = 0;
gl_Position = uModelViewMatrix * vec4(p2, 0, 1);
EmitVertex();
EndPrimitive();
}
//
#version 330 core
precision mediump float;
varying float fTransparency;
varying vec2 vCenter;
uniform float uRadius;
uniform vec2 uScreenHalfSize;
uniform float uShadowTransparency;
uniform float uShadowSmoothness;
out vec4 FragColor;
void main(){
float l = distance(vec2((gl_FragCoord.xy - uScreenHalfSize.xy)/uScreenHalfSize.y), vCenter.xy);
if (l<uRadius) {discard;}
else {FragColor = vec4(0, 0, 0, min(pow(fTransparency, uShadowSmoothness), (l-uRadius)/uRadius*10)*uShadowTransparency);}
}
рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рдерд╛
рдЖрдкрдХрд╛ рд╡рд┐рдирдореНрд░ рд╕реЗрд╡рдХ, рдкрд┐рдХреНрд╕реЗрд▓ рдкреАрдбрд╝рд╛, рд░рд┐рдмрд┐рд▓реНрдбрд░ред
рдореИрдВ рдПрдХ рдЫреЛрдЯрд╛
рдбреЗрдореЛ рд╕рдВрд▓рдЧреНрди рдХрд░ рд░рд╣рд╛ рд╣реВрдВред (EXE Windows)
рдкреБрдирд╢реНрдЪ рд▓реЗрдЦ рдХреЗ рд╢реАрд░реНрд╖рдХ рдореЗрдВ рдПрдХ
рдИрд╕реНрдЯрд░ рдЕрдВрдбрд╛ ,
рд╕рд┐рдпрд╛рд▓рд╛ рдХреНрд░реЙрдирд┐рдХрд▓ рддреНрд░рдпреА рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реИред рдЕрд▓реЗрдХреНрд╕рдИ рдкреЗрдЦреЛрд╡ рд╕реЗ рд╕реАрдВрдЧреЛрдВ рдХреЗ рджреБрд░реНрднрд╛рдЧреНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдлрдВрддрд╛рд╕реА рдХреА рд╢реИрд▓рд┐рдпреЛрдВ рдореЗрдВ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдХрд╛рдоред