рдлреЛрдВрдЧ рдЫрд╛рдпрд╛рдВрдХрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛


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

рдмреБрд┐ рдЯрдпреЛрдВрдЧ рдлреЛрдВрдЧ

рдмреБрдИ рдереЛрдВрдЧ рдлреЛрдВрдЧ 1941 рдореЗрдВ рдкреИрджрд╛ рд╣реБрдП рдереЗ рдФрд░ рд╡рд┐рдпрддрдирд╛рдо рдпреБрджреНрдз рдХреЗ рджреМрд░рд╛рди рдПрдХ рдХрдВрдкреНрдпреВрдЯрд░ рд╡реИрдЬреНрдЮрд╛рдирд┐рдХ рдмрди рдЧрдП рдереЗред 60 рдХреЗ рдЬрд╣рд░реАрд▓реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЕрдкрдиреА рдкрдврд╝рд╛рдИ рдкреВрд░реА рдХрд░рдирд╛ рдЙрдирдХреЗ рд▓рд┐рдП рдореБрд╢реНрдХрд┐рд▓ рд░рд╣рд╛ рд╣реЛрдЧрд╛, рдЗрд╕ рддрдереНрдп рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рдирд╛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдореЛрд░реНрдЪреЗ рдкрд░ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛! рд▓реЗрдХрд┐рди рд╡рд╣ 1975 рддрдХ рдЬреАрд╡рд┐рдд рд░рд╣рдиреЗ рдФрд░ рдЬреАрд╡рд┐рдд рд░рд╣рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ, рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд▓реНрдпреВрдХреЗрдорд┐рдпрд╛ рдиреЗ рдкреНрд░рдХрд╛рд╢ рдФрд░ рдЫрд╛рдпрд╛рдВрдХрди рдХреЗ рдЖрдзреБрдирд┐рдХ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рджреБрдирд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдиреАрдВрд╡ рд░рдЦрдиреЗ рдХреЗ рджреЛ рд╕рд╛рд▓ рдмрд╛рдж рд╣реА рдЕрдкрдирд╛ рдЬреАрд╡рди рд▓реЗ рд▓рд┐рдпрд╛: рдлреЛрдВрдЧ рдХреА рдЫрд╛рдпрд╛ред рд╡рд┐рдпрддрдирд╛рдореА рдирд╛рдореЛрдВ рдореЗрдВ рддреАрди рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ: рдЙрдкрдирд╛рдо, рдордзреНрдп рдирд╛рдо рдФрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдирд╛рдоред рдпрд╣реА рд╣реИ, рдЬрдм рд▓реЛрдЧ рдХрд╣рддреЗ рд╣реИрдВ "рдлреЛрдВрдЧ shader", рд╡реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдирд╛рдо Bui Tyong рдХрд╣рддреЗ рд╣реИрдВред рдЖрдк рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдкрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдирд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред


рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдлреЛрдВрдЧ рд╣реИ, рд▓реЗрдХрд┐рди Google рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╣рд╛рдВред

тАЬрдзреАрд░реЗ рд╕реЗ рдмрд╛рдореНрдмреА рдХреЛ рдзреВрдк рджреЛ
рдореЗрд░реЗ рдорд░рдиреЗ рдХреЗ рдмрд┐рд╕реНрддрд░ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдЦреЗрд▓реЛ,
рдИред рдордВрдж рд░реЛрд╢рдиреА рд╡рд╛рд▓реА рдШрд╛рдЯреА
рдореИрдВ рдЕрдХреЗрд▓рд╛ рдкреИрд░реЛрдВ рдХреЗ рд╕рд╛рде рдЪрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред "

рд▓реЗрдЯ рдж рд▓рд╛рдЗрдЯ рдПрдиреНрдЯрд░ - рдлреНрд░рд╛рдВрд╕рд┐рд╕ рд╣рд╛рд░реНрдкрд░ рдХреА рдПрдХ рдХрд╡рд┐рддрд╛

рдлреЛрдВрдЧ рдХреА рдЫрд╛рдпрд╛ рдмреЗрд╣рдж рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЧрдгрд┐рдд рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдЬреЛ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЖрдкрдХреЛ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдмрдирдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рди рдХрд░реЗрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ, рдЙрд╕рдХрд╛ рдЬреНрдЮрд╛рди рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред рдиреАрдЪреЗ OpenGL рд╢рд╛рдирджрд╛рд░, рдЧреНрд░рд╛рд╣рдо рд╕реЗрд▓рд░реНрд╕ рджреНрд╡рд╛рд░рд╛ 7 рд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдХреНрд░реЛрдиреЛрд╕ рдЧреНрд░реБрдк ARB рдлрд╛рдЙрдВрдбреЗрд╢рди рдХреЗ рдЕрдВрд╢ рд╣реИрдВред

рдП) рдХреБрдЫ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ


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

рдП -1) рдПрдореНрдмрд┐рдПрдВрдЯ рд▓рд╛рдЗрдЯ

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

рдП -2) рдбрд┐рдлреНрдпреВрдЬрд╝ / рдбрд┐рдлреНрдпреВрдЬрд╝ рд▓рд╛рдЗрдЯ

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


рдПрдХ рдкрд╛рд▓реЗ рд╕реЗрдУрдврд╝ рд▓рд┐рдпрд╛ рд╕реНрдХреНрд░реАрди рд╕реЗ рдмрд┐рдЦрд░реЗ / рдЕрд╡рд╢реЛрд╖рд┐рдд рдкрд░рд┐рд╡реЗрд╢ рдкреНрд░рдХрд╛рд╢

A-3) рд╕реНрдкреЗрдХреНрдпреБрд▓рд░ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ

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


рдлрд┐рд▓реНрдо рдХреЗ рд╕рд╛рде рдлрд┐рд▓реНрдо - рдПрдХ рдЪрдордХрджрд╛рд░ рдлрд┐рд▓реНрдо рдХреЛрдЯрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдореЛрдЯреА рд░рдВрдЧреАрди рдХрд╛рдЧрдЬ, рдПрдХ рдмрдЪреНрдЪреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрд╣рд╛рд░ред

A- 4) рдЕрд▓рдмреЗрдбреЛ

рдпрд╣ рд╕рддрд╣ рджреНрд╡рд╛рд░рд╛ рдкрд░рд╛рд╡рд░реНрддрд┐рдд рдкреНрд░рдХрд╛рд╢ рдХрд╛ рдЕрдВрд╢ рд╣реИред

A-5) рдлреЛрдВрдЧ рдлреЙрд░реНрдореВрд▓рд╛

рдлреЛрдВрдЧ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рд╛рдордЧреНрд░реА рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХрд╛ рд╕реВрддреНрд░ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:

Ip=kaia+kd left( vecLред VecN right)id+ks left( vecRред VecV/right) Alphais$


рдЬрд╣рд╛рдВ:

ka : рдкрд░рд┐рд╡реЗрд╢ рд╕рд╛рдордЧреНрд░реА

kd : рдбрд┐рдлреНрдпреВрдЬрд╝ рдордЯреАрд░рд┐рдпрд▓

ks : рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рд╛рдордЧреНрд░реА рдФрд░  рдЕрд▓реНрдлрд╛ : рдЧреНрд▓реЙрд╕ рд╡реИрд▓реНрдпреВ

ia : рдкрд░рд┐рд╡реЗрд╢ рдкреНрд░рдХрд╛рд╢

id : рдлреИрд▓рд╛рдирд╛ рдкреНрд░рдХрд╛рд╢

is : рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдкреНрд░рдХрд╛рд╢

рдЖрдк рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВ, рд╡реИрдХреНрдЯрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛? рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ, рдЕрдм рд╣рдо рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдПрдВрдЧреЗ:

 vecN : рд╕рддрд╣ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп

 vecL : рдЫрд╛рдпрд╛рдВрдХрд┐рдд рдмрд┐рдВрджреБ рд╕реЗ рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рддрдХ рдЗрдХрд╛рдИ рд╡реЗрдХреНрдЯрд░ (рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдкреНрд░рдХрд╛рд╢ рд╡реЗрдХреНрдЯрд░)

 vecR : рдкреНрд░рдХрд╛рд╢ рд╡реЗрдХреНрдЯрд░ рдХреЗ рдирдХрд╛рд░рд╛рддреНрдордХ рдореВрд▓реНрдп рдХрд╛ рдкреНрд░рддрд┐рдмрд┐рдВрдм

 overrightarrowV : рд╡реЗрдХреНрдЯрд░ рджрд░реНрд╢рдХ рдХреА рдУрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдд


рдмреА) рдЧреМрд░реНрдб рд╢реЗрдбрд┐рдВрдЧ


рдлреЛрдВрдЧ рдХреА рд╢реЗрдбрд░ рдореЗрдВ рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЖрдк рдЬреАрдПрд▓рдПрд╕рдПрд▓ рдкрд░ рдЧреМрд░реЛ рд╢реЗрдбрд┐рдВрдЧ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдореИрдВ рд╕рдВрд╕реНрдХрд░рдг GLSL 4.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢рд╛рдирджрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдк www.learnopengl.com рдХреЗ рдкреНрд░рд╢рдВрд╕рдХ рд╣реИрдВ, рддреЛ рдЖрдк 3.3 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рддреЛ, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЧреМрд░рд╛рдб рдЫрд╛рдпрд╛рдВрдХрди рдХреНрдпрд╛ рд╣реИред

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


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

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 1 : рдЬреАрдПрд▓рдПрд╕рдПрд▓ 4.1 рдкрд░ Gourox рд╡рд░реНрдЯреЗрдХреНрд╕ рд╢реЗрдбрд┐рдВрдЧ

#version 410 core // Per-vertex inputs layout (location = 0) in vec4 position; layout (location = 1) in vec3 normal; // Matrices we'll need layout (std140) uniform constants { mat4 mv_matrix; mat4 view_matrix; mat4 proj_matrix; }; // Light and material properties uniform vec3 light_pos = vec3(100.0, 100.0, 100.0); uniform vec3 diffuse_albedo = vec3(0.5, 0.2, 0.7); uniform vec3 specular_albedo = vec3(0.7); uniform float specular_power = 128.0; uniform vec3 ambient = vec3(0.1, 0.1, 0.1); // Outputs to the fragment shader out VS_OUT { vec3 color; } vs_out; void main(void) { // Calculate view-space coordinate vec4 P = mv_matrix * position; // Calculate normal in view space vec3 N = mat3(mv_matrix) * normal; // Calculate view-space light vector vec3 L = light_pos - P.xyz; // Calculate view vector (simply the negative of the view-space position) vec3 V = -P.xyz; // Normalize all three vectors N = normalize(N); L = normalize(L); V = normalize(V); // Calculate R by reflecting -L around the plane defined by N vec3 R = reflect(-L, N); // Calculate the diffuse and specular contributions vec3 diffuse = max(dot(N, L), 0.0) * diffuse_albedo; vec3 specular = pow(max(dot(R, V), 0.0), specular_power) * specular_albedo; // Send the color output to the fragment shader vs_out.color = ambient + diffuse + specular; // Calculate the clip-space position of each vertex gl_Position = proj_matrix * P; } 

рдФрд░ рдЕрдм рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдХрд░рдирд╛ред

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 2: рдПрдХ рд╣реА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рдЯреБрдХрдбрд╝реЗ shaderред

 #version 410 core // Output layout (location = 0) out vec4 color; // Input from vertex shader in VS_OUT { vec3 color; } fs_in; void main(void) { // Write incoming color to the framebuffer color = vec4(fs_in.color, 1.0); } 

рдЧ) рдлреЛрдВрдЧ рдЫрд╛рдпрд╛рдВрдХрди


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


рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 3: рдЬреАрдПрд▓рдПрд╕рдПрд▓ 4.1 рдкрд░ рдлреЛрдВрдЧ рд╢реЗрдбрд░ рдХреА рд╢реАрд░реНрд╖ рдЫрд╛рдпрд╛рдХрд╛рд░ред

 #version 410 core // Per-vertex inputs layout (location = 0) in vec4 position; layout (location = 1) in vec3 normal; // Matrices we'll need layout (std140) uniform constants { mat4 mv_matrix; mat4 view_matrix; mat4 proj_matrix; }; // Inputs from vertex shader out VS_OUT { vec3 N; vec3 L; vec3 V; } vs_out; // Position of light uniform vec3 light_pos = vec3(100.0, 100.0, 100.0); void main(void) { // Calculate view-space coordinate vec4 P = mv_matrix * position; // Calculate normal in view-space vs_out.N = mat3(mv_matrix) * normal; // Calculate light vector vs_out.L = light_pos - P.xyz; // Calculate view vector vs_out.V = -P.xyz; // Calculate the clip-space position of each vertex gl_Position = proj_matrix * P; } 

рд▓рдЧрднрдЧ рдХреБрдЫ рднреА рдирд╣реАрдВ рдмрджрд▓рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЯреБрдХрдбрд╝реЗ рдЯреБрдХрдбрд╝реЗ рдореЗрдВ, рд╕реНрдерд┐рддрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реИред

рд▓рд┐рд╕реНрдЯрд┐рдВрдЧ 4: рдлреЛрдВрдЧ рдЯреБрдХрдбрд╝рд╛ shader shaderред

 #version 410 core // Output layout (location = 0) out vec4 color; // Input from vertex shader in VS_OUT { vec3 N; vec3 L; vec3 V; } fs_in; // Material properties uniform vec3 diffuse_albedo = vec3(0.5, 0.2, 0.7); uniform vec3 specular_albedo = vec3(0.7); uniform float specular_power = 128.0; uniform vec3 ambient = vec3(0.1, 0.1, 0.1); void main(void) { // Normalize the incoming N, L and V vectors vec3 N = normalize(fs_in.N); vec3 L = normalize(fs_in.L); vec3 V = normalize(fs_in.V); // Calculate R locally vec3 R = reflect(-L, N); // Compute the diffuse and specular components for each fragment vec3 diffuse = max(dot(N, L), 0.0) * diffuse_albedo; vec3 specular = pow(max(dot(R, V), 0.0), specular_power) * specular_albedo; // Write final color to the framebuffer color = vec4(ambient + diffuse + specular, 1.0); } 

рдЦреИрд░, рдпрд╣ рд▓реЗрдЦ рдХрд╛ рдЕрдВрдд рд╣реИ, рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рдкрд╕рдВрдж рдЖрдпрд╛ред рдпрджрд┐ рдЗрд╕рдиреЗ рдЖрдк рдореЗрдВ рдУрдкрдирдЬреАрдПрд▓ рдореЗрдВ рд░реБрдЪрд┐ рдХреА рдПрдХ рдЪрд┐рдВрдЧрд╛рд░реА рдХреЛ рдЬрдиреНрдо рджрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдк рдУрдкрдирдЬреАрдПрд▓ рдХреЛ рдЕрдореЗрдЬрд╝реЕрди рдкрд░ рдЦрд░реАрдж рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ learnopengl.com рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк shaders рдХреЗ рд╕рд╛рде рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рддреЛ рдореИрдВ рдмреБрдХ рдСрдл рд╢реЗрдбреНрд╕ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред

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


All Articles