3 рдбреА рдЦреБрдж рдХрд░рддреЗ рд╣реИрдВред рднрд╛рдЧ 1: рдкрд┐рдХреНрд╕реЗрд▓ рдФрд░ рд░реЗрдЦрд╛рдПрдБ



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

рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ рд╣рдо рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ:

  • рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХрд╛ рдкреНрд░рддрд┐рдкрд╛рджрди (рд╕реЙрдлреНрдЯрд╡реЗрдпрд░, рд╣рд╛рд░реНрдбрд╡реЗрдпрд░)
  • рдкрд┐рдХреНрд╕реЗрд▓ / рд╕рддрд╣ рдХреНрдпрд╛ рд╣реИ?
  • рд▓рд╛рдЗрди рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг

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

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

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

рдкрд┐рдХреНрд╕реЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдХреНрд░реАрди рдкрд░ рд╕рднреА рддреНрд░рд┐-рдЖрдпрд╛рдореА рдбрд┐рд╕реНрдкреНрд▓реЗ, рдмрд╛рдж рдореЗрдВ рд▓реЗрдЦреЛрдВ рдореЗрдВ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ рдзреАрдорд╛ рд╣реЛрдЧрд╛? рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рддреНрд╡рд░рдг рдХреЗ рдмрд┐рдирд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рджреНрд╡рд╛рд░рд╛ рддреНрд╡рд░рдг) - рд╣реЛрдЧрд╛ред рдкрд╣рд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рддреНрд╡рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд╣рдо 3 рдбреА рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рдкрд╣рд▓реБрдУрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЦрд░реЛрдВрдЪ рд╕реЗ рд╕рдм рдХреБрдЫ рд▓рд┐рдЦреЗрдВрдЧреЗред рдЖрдЗрдП рднрд╡рд┐рд╖реНрдп рдХреЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдХреБрдЫ рд╢рдмреНрджреЛрдВ рдХреЛ рджреЗрдЦреЗрдВ:

  • (Rendering) тАФ 3D- . , 3D- , , .
  • (Software Rendering) тАФ . , , , - . , . 3D- , тАФ .
  • рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд░реЗрдВрдбрд░рд┐рдВрдЧ - рдПрдХ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░-рдЕрд╕рд┐рд╕реНрдЯреЗрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ред рдореИрдВ рдЗрд╕реЗ рдЧреЗрдо рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реА рд░реВрдЯреАрди рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╡реАрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рдХрд╛ рдХрд╛рдо рд╕рдВрднрд╛рд▓рддреА рд╣реИ, рдЬрд┐рд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

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

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ, рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдкрд╛рда index.html рдлрд╝рд╛рдЗрд▓ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░реА рд╣реИ:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>3D itтАЩs easy. Part 1</title>
</head>

<body>
    <!--         -->
    <canvas id="surface" width="800" height="600"></canvas>

    <script>
        //    
    </script>
</body>

</html>

рдореИрдВ рдЕрдм JS рдФрд░ рдХреИрдирд╡рд╛рд╕ рдкрд░ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ - рдпреЗ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдореБрдЦреНрдп рдкрд╛рддреНрд░ рдирд╣реАрдВ рд╣реИрдВред рд▓реЗрдХрд┐рди рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдордЭ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░реВрдВрдЧрд╛ рдХрд┐ <рдХреИрдирд╡рд╛рд╕ ...> рдПрдХ рдЖрдпрдд рд╣реИ (рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, 800 рдмрд╛рдп 600 рдкрд┐рдХреНрд╕рд▓ рдЖрдХрд╛рд░ рдореЗрдВ) рдЬрд┐рд╕ рдкрд░ рдореИрдВ рд╕рднреА рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реВрдВрдЧрд╛ред рдореИрдВрдиреЗ рдПрдХ рдмрд╛рд░ рдХреИрдирд╡рд╛рд╕ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдФрд░ рдЕрдм рдЗрд╕реЗ рдирд╣реАрдВ рдмрджрд▓реЗрдЧрд╛ред

<script> тАж </script> 

рд╕реНрдХреНрд░рд┐рдкреНрдЯ - рдПрдХ рдРрд╕рд╛ рддрддреНрд╡ рдЬрд┐рд╕рдХреЗ рднреАрддрд░ рд╣рдо 3D рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЛ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ (рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ) рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рддрд░реНрдХ рд▓рд┐рдЦреЗрдВрдЧреЗред 

рдЬрдм рд╣рдордиреЗ рдЕрднреА рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ index.html рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХреА , рддреЛ рд╣рдо 3D рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред

рдЬрдм рд╣рдо рд╡рд┐рдВрдбреЛ рдореЗрдВ рдХреБрдЫ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЕрдВрддрд┐рдо рдЧрдгрдирд╛ рдкрд┐рдХреНрд╕реЗрд▓ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╣ рд╣реИ рдЬреЛ рдореЙрдирд┐рдЯрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЬрд┐рддрдиреЗ рдЕрдзрд┐рдХ рдкрд┐рдХреНрд╕рд▓реНрд╕ рд╣реЛрддреЗ рд╣реИрдВ, рддрд╕реНрд╡реАрд░ рдЙрддрдиреА рд╣реА рддреЗрдЬ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдХрдВрдкреНрдпреВрдЯрд░ рднреА рдЕрдзрд┐рдХ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рд╕реНрдЯреЛрд░ рдХрд┐рдП рдЧрдП рд╡рд┐рдВрдбреЛ рдореЗрдВ рд╣рдо рдХреИрд╕реЗ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ? рдХрд┐рд╕реА рднреА рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЛ рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдкрд┐рдХреНрд╕реЗрд▓ рд╕реНрд╡рдпрдВ рдПрдХ рд░рдВрдЧ рд╣реИред рдЕрд░реНрдерд╛рдд, 800x600 рдХреЗ рд╕реНрдХреНрд░реАрди рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдорд╛рд░реА рдЦрд┐рдбрд╝рдХреА рдореЗрдВ 800 рдкрд┐рдХреНрд╕реЗрд▓ рдХреА 600 рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН 800 * 600 = 480000 рдкрд┐рдХреНрд╕рд▓, рдмрд╣реБрдд рдХреБрдЫ, рд╣реИ рдирд╛? рдкрд┐рдХреНрд╕реЗрд▓ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЖрдЗрдП рд╕реЛрдЪрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдХрд┐рд╕ рд╕рд░рдгреА рдореЗрдВ рдкрд┐рдХреНрд╕рд▓ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВрдЧреЗред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 800 рд╕реЗ 600 рдкрд┐рдХреНрд╕рд▓ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП, рддреЛ рд╕рдмрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рдХрд▓реНрдк 800 рдХреЗ 600 рдХреЗ рджреЛ рдЖрдпрд╛рдореА рд╕рд░рдгреА рдореЗрдВ рд╣реИред рдФрд░ рдпрд╣ рд▓рдЧрднрдЧ рд╕рд╣реА рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдпрд╛ рдмрд▓реНрдХрд┐, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣реА рд╡рд┐рдХрд▓реНрдк рд╣реИред рд▓реЗрдХрд┐рди рдЦрд┐рдбрд╝рдХреА рдХреЗ рдкрд┐рдХреНрд╕реЗрд▓, 480,000 рддрддреНрд╡реЛрдВ рдХреЗ рдПрдХ рдЖрдпрд╛рдореА рдЖрдпрд╛рдо рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ (рдпрджрд┐ рд╕рдВрдХрд▓реНрдк 800 рд╕реЗ 600 рд╣реИ),рд╕рд┐рд░реНрдл рдЗрд╕рд▓рд┐рдП рдХрд┐ рдпрд╣ рдПрдХ рдЖрдпрд╛рдореА рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреЗрдЬрд╝ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдПрдХ рд╕рддрдд рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддрд╛ рд╣реИ (рд╕рдм рдХреБрдЫ рдкрд╛рд╕ рдореЗрдВ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ)ред рджреНрд╡рд┐-рдЖрдпрд╛рдореА рд╕рд░рдгреА рдореЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреЗрдПрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ), рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рдореЗрдореЛрд░реА рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдмрд┐рдЦрд░рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдРрд╕реЗ рд╕рд░рдгреА рдХреЗ рддрддреНрд╡реЛрдВ рддрдХ рдкрд╣реБрдВрдЪ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧреЗрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдЖрдпрд╛рдореА рд╕рд░рдгреА рдкрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ 1 рдЪрдХреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рджреЛ рдЖрдпрд╛рдореА рдкреВрд░реНрдгрд╛рдВрдХ 2 рдХреЗ рд▓рд┐рдП, рдЪрдХреНрд░ рдХреЗ рд╣рдЬрд╛рд░реЛрдВ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдЧрддрд┐ рдпрд╣рд╛рдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдРрд╕реА рд╕рд░рдгреА рдореЗрдВ рдПрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреНрдпрд╛ рд╣реИ? рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд░рдВрдЧ рд╣реИ, рдпрд╛ рдЗрд╕рдХреЗ рдШрдЯрдХреЛрдВ рдореЗрдВ рд╕реЗ 3 (рд▓рд╛рд▓, рд╣рд░рд╛, рдиреАрд▓рд╛)ред рдХреЛрдИ рднреА, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдмрд╕реЗ рд░рдВрдЧреАрди рдЪрд┐рддреНрд░ рд╡рд┐рднрд┐рдиреНрди рд░рдВрдЧреЛрдВ рдХреЗ рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИред рд╕реНрдореГрддрд┐ рдореЗрдВ рдПрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рдЖрдк рдЬреИрд╕реЗ рдЪрд╛рд╣реЗрдВ, 3 рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА, рдпрд╛ рдРрд╕реА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ рд▓рд╛рд▓, рдЪрд┐рдХрдирд╛,рдиреАрд▓рд╛; рдпрд╛ рдХреБрдЫ рдФрд░ред рдПрдХ рдЫрд╡рд┐ рдЬрд┐рд╕рдореЗрдВ рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рд╕рд┐рд░реНрдл рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВ, рдореИрдВ рд╕рддрд╣ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреВрдВрдЧрд╛ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЪреВрдВрдХрд┐ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рднреА рдЪреАрдЬрд╝реЛрдВ рдХреЛ рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рдПрдХ рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рд╕рд░рдгреА рдореЗрдВ рдмрджрд▓рддреЗ рддрддреНрд╡ (рдкрд┐рдХреНрд╕реЗрд▓) - рд╣рдо рдкрд┐рдХреНрд╕реЗрд▓-рджрд░-рдкрд┐рдХреНрд╕реЗрд▓ рд╕реНрдХреНрд░реАрди рдкрд░ рдЫрд╡рд┐ рдХреЛ рдмрджрд▓ рджреЗрдВрдЧреЗред рдпрд╣ рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рд╣реИ рдЬреИрд╕рд╛ рд╣рдо рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдХрд░реЗрдВрдЧреЗред

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

//     ()    
const ctx = document
.getElementById('surface')
.getContext('2d')

//     ,    
// +       
const imageData = ctx.createImageData(800, 600)

рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЗрдореЗрдЬрдбреЗрдЯрд╛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдЬрд┐рд╕рдореЗрдВ 3 рдЧреБрдг рд╣реИрдВ:

  • рдКрдВрдЪрд╛рдИ рдФрд░ рдЪреМрдбрд╝рд╛рдИ - рдкреВрд░реНрдгрд╛рдВрдХ рдбреНрд░рд╛рдЗрдВрдЧ рдХреЗ рд▓рд┐рдП рдЦрд┐рдбрд╝рдХреА рдХреА рдКрдВрдЪрд╛рдИ рдФрд░ рдЪреМрдбрд╝рд╛рдИ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреЗ рд╣реИрдВ
  • рдбреЗрдЯрд╛ - 8-рдмрд┐рдЯ рдЕрд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ рд╕рд░рдгреА (рдЖрдк рдЗрд╕рдореЗрдВ 0 рд╕реЗ 255 рддрдХ рдХреА рд╕реАрдорд╛ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛рдПрдБ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)

рдбреЗрдЯрд╛ рд╕рд░рдгреА рдореЗрдВ рдПрдХ рд╕рд░рд▓ рд▓реЗрдХрд┐рди рд╡реНрдпрд╛рдЦреНрдпрд╛рддреНрдордХ рд╕рдВрд░рдЪрдирд╛ рд╣реИред рдпрд╣ рдПрдХ-рдЖрдпрд╛рдореА рд╕рд░рдгреА рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХрд╛ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреА рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдирд┐рдореНрди рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗ:
рд╕рд░рдгреА рдХреЗ рдкрд╣рд▓реЗ 4 рддрддреНрд╡ (рд╕реВрдЪрдХрд╛рдВрдХ 0,1,2,3) рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдкрд╣рд▓реЗ рдкрд┐рдХреНрд╕реЗрд▓ рдХрд╛ рдбреЗрдЯрд╛ рд╣реИрдВред рджреВрд╕рд░реА 4 рддрддреНрд╡ (рд╕реВрдЪрдХрд╛рдВрдХ 4, 5, 6, 7) рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдХреЗ рджреВрд╕рд░реЗ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдбреЗрдЯрд╛ рд╣реИрдВред рдЬрдм рд╣рдо рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдХреЗ 800 рд╡реЗрдВ рдкрд┐рдХреНрд╕реЗрд▓ рдкрд░ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ, рддреЛ рдмрд╢рд░реНрддреЗ рдХрд┐ рдЦрд┐рдбрд╝рдХреА 800 рдкрд┐рдХреНрд╕реЗрд▓ рдЪреМрдбрд╝реА рд╣реЛ - 801 рд╡реАрдВ рдкрд┐рдХреНрд╕реЗрд▓ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрдЧреАред рдЕрдЧрд░ рд╣рдо рдЗрд╕реЗ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рд╕реНрдХреНрд░реАрди рдкрд░ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рдХрд╛ 1 рдкрд┐рдХреНрд╕реЗрд▓ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╕рд░рдгреА рдореЗрдВ рдЧрд┐рдирддреА рд╕реЗ рдпрд╣ 801 рд╡рд╛рдВ рдкрд┐рдХреНрд╕реЗрд▓ рд╣реЛрдЧрд╛)ред рд╕рд░рдгреА рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП 4 рддрддреНрд╡ рдХреНрдпреЛрдВ рд╣реИрдВ? рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреИрдирд╡рд╛рд╕ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рд░рдВрдЧ рдХреЗ рд▓рд┐рдП 1 рддрддреНрд╡ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ - рд▓рд╛рд▓, рд╣рд░рд╛, рдиреАрд▓рд╛ (рдпреЗ 3 рддрддреНрд╡ рд╣реИрдВ), рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдХреЗ рд▓рд┐рдП 1 рдЕрдзрд┐рдХ рддрддреНрд╡ (рд╡реЗ рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ рдпрд╛ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рднреА рдХрд╣рддреЗ рд╣реИрдВ)ред рд░рдВрдЧ рдХреА рддрд░рд╣ рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓, 0 (рдкрд╛рд░рджрд░реНрд╢реА) рд╕реЗ 255 (рдЕрдкрд╛рд░рджрд░реНрд╢реА) рдХреА рд╕реАрдорд╛ рдореЗрдВ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде, рд╣рдореЗрдВ рдПрдХ 32-рдмрд┐рдЯ рдЫрд╡рд┐ рдорд┐рд▓рддреА рд╣реИ,рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдореЗрдВ 8 рдмрд┐рдЯреНрд╕ рдХреЗ 4 рддрддреНрд╡ рд╣реЛрддреЗ рд╣реИрдВред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ: рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: рд▓рд╛рд▓, рд╣рд░рд╛, рдиреАрд▓рд╛ рд░рдВрдЧ рдФрд░ рдЕрд▓реНрдлрд╛ рдЪреИрдирд▓ (рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛)ред рдЗрд╕ рд░рдВрдЧ рдпреЛрдЬрдирд╛ рдХреЛ ARGB (рдЕрд▓реНрдлрд╛ рд░реЗрдб рдЧреНрд░реАрди рдмреНрд▓реВ) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдФрд░ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ 32 рдмрд┐рдЯреНрд╕ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░рддрд╛ рд╣реИ, рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 32 рдмрд┐рдЯ рдЫрд╡рд┐ рд╣реИ (рд╡реЗ 32 рдмрд┐рдЯреНрд╕ рдХреА рд░рдВрдЧ рдЧрд╣рд░рд╛рдИ рдХреЗ рд╕рд╛рде рдПрдХ рдЫрд╡рд┐ рднреА рдХрд╣рддреЗ рд╣реИрдВ)ред

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

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

class Drawer {
    surface = null
    width = 0
    height = 0

    constructor(surface, width, height) {
        this.surface = surface
        this.width = width
        this.height = height
    }
}

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

const drawer = new Drawer(
    imageData.data,
    imageData.width,
    imageData.height
)

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

drawPixel(x, y, r, g, b)  { }

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ drawPixel рдлрд╝рдВрдХреНрд╢рди рдЕрд▓реНрдлрд╛ рдкреИрд░рд╛рдореАрдЯрд░ (рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛) рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдКрдкрд░ рд╣рдордиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рдкрд┐рдХреНрд╕реЗрд▓ рд╕рд░рдгреА рдореЗрдВ 3 рд░рдВрдЧ рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ 1 рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдореИрдВрдиреЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдХрд╛ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рджрд┐рдпрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЗрд╕рдХреА рдмрд┐рд▓реНрдХреБрд▓ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╣рдо 255 рд╕реЗрдЯ рдХрд░реЗрдВрдЧреЗ (рдпрд╛рдиреА рд╕рдм рдХреБрдЫ рдЕрдкрд╛рд░рджрд░реНрд╢реА рд╣реЛрдЧрд╛)ред рдЕрдм рдЖрдЗрдП x, y рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рд░рдВрдЧ рдХреИрд╕реЗ рд▓рд┐рдЦреЗрдВ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЫрд╡рд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рдПрдХ-рдЖрдпрд╛рдореА рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП 1 рдкрд┐рдХреНрд╕реЗрд▓ (8 рдмрд┐рдЯ) рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рд░рдгреА рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рдкрд┐рдХреНрд╕реЗрд▓ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдкрд╣рд▓реЗ рд▓рд╛рд▓ рд╕реНрдерд╛рди рд╕реВрдЪрдХрд╛рдВрдХ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рднреА рдкрд┐рдХреНрд╕реЗрд▓ рдЗрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ (рдЬреИрд╕реЗ [r, g, b, a])ред рд╕рд░рдгреА рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдереЛрдбрд╝рд╛ рд╡рд┐рд╡рд░рдг:



рд╣рд░реЗ рд░рдВрдЧ рдХреА рддрд╛рд▓рд┐рдХрд╛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдХреИрд╕реЗ рд░рдВрдЧ рдШрдЯрдХреЛрдВ рдХреЛ рдПрдХ рдЖрдпрд╛рдореА рд╕рддрд╣ рд╕рд░рдгреА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рд╣реА рд╕рд░рдгреА рдореЗрдВ рдЙрдирдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдиреАрд▓реЗ рд░рдВрдЧ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдЬреЛ рдбреНрд░рд╛рдкрд┐рдХреНрд╕рд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрдВ рдПрдХ рдЖрдпрд╛рдореА рд╕рд░рдгреА рдореЗрдВ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЖрд░, рдЬреА, рдмреА рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдиреАрд▓реЗ рд░рдВрдЧ рдореЗрдВ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдПред рдЗрд╕рд▓рд┐рдП, рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд▓рд┐рдП рд░рдВрдЧ рдХрд╛ рд▓рд╛рд▓ рдШрдЯрдХ рдкрд╣рд▓реЗ рдЖрддрд╛ рд╣реИ, рдЪрд▓реЛ рдЗрд╕рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░реЗрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдо рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ X1Y1 рдореЗрдВ рдкрд┐рдХреНрд╕реЗрд▓ рд░рдВрдЧ рдХреЗ рд▓рд╛рд▓ рдШрдЯрдХ рдХреЛ 2 рдХреЗ 2 рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕реВрдЪрдХрд╛рдВрдХ 12 рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдЧрдгрдирд╛ рдХреИрд╕реЗ рдХрд░реЗрдВ? рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдЙрд╕ рдкрдВрдХреНрддрд┐ рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рдорд┐рд▓ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдЪрд┐рддреНрд░ рдХреА рдЪреМрдбрд╝рд╛рдИ рдХреЛ Y рдФрд░ 4 рд╕реЗ рдЧреБрдгрд╛ рдХрд░рддреЗ рд╣реИрдВ (рдкреНрд░рддрд┐ рдкрд┐рдХреНрд╕реЗрд▓ рдорд╛рди) - рдпрд╣ рд╣реЛрдЧрд╛:

width * y * 4 
//  :
2 * 1 * 4 = 8

рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рдЗрдВрдбреЗрдХреНрд╕ 8. рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред рдЕрдЧрд░ рд╣рдо рдкреНрд▓реЗрдЯ рд╕реЗ рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкрд░рд┐рдгрд╛рдо рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдм рдЖрдкрдХреЛ рд╡рд╛рдВрдЫрд┐рдд рд▓рд╛рд▓ рд╕реВрдЪрдХрд╛рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдпрд╛ рдЧрдпрд╛ рдкрдВрдХреНрддрд┐ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рдПрдХ рдХреЙрд▓рдо рдСрдлрд╕реЗрдЯ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрдВрдХреНрддрд┐ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ X рдЧреБрдирд╛ 4 рдЬреЛрдбрд╝реЗрдВред рдкреВрд░реНрдг рд╕реВрддреНрд░ рд╣реЛрдЧрд╛:

width * y * 4 + x * 4 
//     :
(width * y + x) * 4
//  :
(2 * 1 + 1) * 4 = 12

рдЕрдм рд╣рдо рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рд╛рде 12 рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдкрд┐рдХреНрд╕реЗрд▓ X1Y1 рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реВрдЪрдХрд╛рдВрдХ 12 рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред

рдЕрдиреНрдп рд░рдВрдЧ рдШрдЯрдХреЛрдВ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд▓рд╛рд▓ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рдПрдХ рд░рдВрдЧ рдСрдлрд╕реЗрдЯ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: +1 (рд╣рд░рд╛), +2 (рдиреАрд▓рд╛), +3 (рдЕрд▓реНрдлрд╛) ред рдЕрдм рд╣рдо рдбреНрд░рд╛рдЕрд░ рдХреНрд▓рд╛рд╕ рдХреЗ рдЕрдВрджрд░ рдбреНрд░рд╛рдкрд┐рдХреНрд╕рд▓ рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдКрдкрд░ рджрд┐рдП рдЧрдП рдлреЙрд░реНрдореВрд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ:

drawPixel(x, y, r, g, b) {
    const offset = (this.width * y + x) * 4

    this.surface[offset] = r
    this.surface[offset + 1] = g
    this.surface[offset + 2] = b
    this.surface[offset + 3] = 255
}

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

рдпрд╣ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдФрд░ рдЕрдВрдд рдореЗрдВ рд╕реНрдХреНрд░реАрди рдкрд░ рдкрд╣рд▓рд╛ рдкрд┐рдХреНрд╕реЗрд▓ рджреЗрдЦрдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдпрд╣рд╛рдБ рдкрд┐рдХреНрд╕реЗрд▓ рд░реЗрдВрдбрд░ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

//     Drawer
drawer.drawPixel(10, 10, 255, 0, 0)
drawer.drawPixel(10, 20, 0, 0, 255)

//         canvas
ctx.putImageData(imageData, 0, 0)

рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВ 2 рдкрд┐рдХреНрд╕реЗрд▓, рдПрдХ рд▓рд╛рд▓ 255, 0, 0, рджреВрд╕рд░рд╛ рдиреАрд▓рд╛ 0, 0, 255 рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдЫрд╡рд┐ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиред рдбреЗрдЯрд╛ рд╕рд░рдгреА (рдпрд╣ рджрд░рд╛рдЬ рд╡рд░реНрдЧ рдХреЗ рдЕрдВрджрд░ рдХреА рд╕рддрд╣ рднреА рд╣реИ) рд╕реНрдХреНрд░реАрди рдкрд░ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрдЧреАред рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ ctx.putImageData (imageData, 0, 0) рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ imageData рд╡рд╣ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдкрд┐рдХреНрд╕реЗрд▓ рдХрд╛ рд╕рд░рдгреА рдФрд░ рдбреНрд░рд╛рдЗрдВрдЧ рдХреНрд╖реЗрддреНрд░ рдХреА рдЪреМрдбрд╝рд╛рдИ / рдКрдВрдЪрд╛рдИ, рдФрд░ 0, 0 рд╡рд╣ рдмрд┐рдВрджреБ рд╕рд╛рдкреЗрдХреНрд╖ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдкрд┐рдХреНрд╕реЗрд▓ рдХрд╛ рд╕рд░рдгреА рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдЧрд╛ (рд╣рдореЗрд╢рд╛ 0, 0 рдЫреЛрдбрд╝реЗрдВ) ) рдпрджрд┐ рдЖрдкрдиреЗ рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдХреИрдирд╡рд╛рд╕ рддрддреНрд╡ рдХреЗ рдКрдкрд░реА рдмрд╛рдПрдБ рдореЗрдВ рдирд┐рдореНрди рдЪрд┐рддреНрд░ рд╣реЛрдЧрд╛: рдХреНрдпрд╛ рдЖрдкрдиреЗ



рдкрд┐рдХреНрд╕реЗрд▓ рджреЗрдЦрд╛? рд╡реЗ рдХрд┐рддрдиреЗ рдЫреЛрдЯреЗ рд╣реИрдВ, рдФрд░ рдХрд┐рддрдирд╛ рдХрд╛рдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЕрдм, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдЧрддрд┐рд╢реАрд▓рддрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рд╣рд░ 10 рдорд┐рд▓реАрд╕реЗрдХреЗрдВрдб рд╣рдорд╛рд░реЗ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рджрд╛рдИрдВ рдУрд░ рд╢рд┐рдлреНрдЯ рдХрд░ рджреЗ (рд╣рдо рдкреНрд░рддреНрдпреЗрдХ 10 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдореЗрдВ +1 рдХрд░рдХреЗ X рдкрд┐рдХреНрд╕реЗрд▓ рдмрджрд▓рддреЗ рд╣реИрдВ), рд╣рдо рдПрдХ рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдкрд┐рдХреНрд╕реЗрд▓ рдбреНрд░рд╛рдЗрдВрдЧ рдХреЛрдб рдХреЛ рд╕рд╣реА рдХрд░рддреЗ рд╣реИрдВ:

let x = 10
setInterval(() => {

    drawer.drawPixel(x++, 20, 0, 0, 255)
    ctx.putImageData(imageData, 0, 0)

}, 10)

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



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

clearSurface() {
    const surfaceSize = this.width * this.height * 4
    for (let i = 0; i < surfaceSize; i++) {
        this.surface[i] = 0
    }
}

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

let x = 10
setInterval(() => {
    drawer.clearSurface()
    drawer.drawPixel(x++, 20, 0, 0, 255)
    ctx.putImageData(imageData, 0, 0)
}, 10)

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

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

drawLine(x1, y1, x2, y2, r, g, b) { }

рдХрд┐рд╕реА рднреА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдкрд┐рдХреНрд╕реЗрд▓ рд╣реЛрддреЗ рд╣реИрдВ, рдпрд╣ рдХреЗрд╡рд▓ X1, y1 рд╕реЗ x2, y2 рддрдХ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИред рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЪреВрдВрдХрд┐ рд░реЗрдЦрд╛ рдореЗрдВ рдкрд┐рдХреНрд╕реЗрд▓ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЗрд╕реЗ рдкрд┐рдХреНрд╕реЗрд▓ рджреНрд╡рд╛рд░рд╛ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ рд▓реВрдк рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреЗ рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рдЧрдгрдирд╛ рдХреИрд╕реЗ рдХрд░реЗрдВ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, [0, 0] рд╕реЗ [3, 0] рддрдХ рдПрдХ рд░реЗрдЦрд╛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рд╣рдЬ рд░реВрдк рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ 4 рдкрд┐рдХреНрд╕реЗрд▓ ([0, 0], [1, 0], [2, 0], [3, 0],) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред рд▓реЗрдХрд┐рди [резреи, рем] рд╕реЗ [рекрей, резрек] рддрдХ, рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд▓рд╛рдЗрди рдХрд┐рддрдиреА рд▓рдВрдмреА рд╣реЛрдЧреА (рдХрд┐рддрдиреЗ рдкрд┐рдХреНрд╕рд▓ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рдФрд░ рдЙрдирдХреЗ рдкрд╛рд╕ рдХреНрдпрд╛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╣реЛрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдереЛрдбрд╝реА рдЬреНрдпрд╛рдорд┐рддрд┐ рдХреЛ рдпрд╛рдж рдХрд░реЗрдВред рддреЛ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд▓рд╛рдЗрди рд╣реИ рдЬреЛ X1, y1 рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ рдФрд░ x2, y2 рдкрд░ рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИред


рдЪрд▓реЛ рд╢реБрд░реБрдЖрдд рдФрд░ рдЕрдВрдд рд╕реЗ рдПрдХ рдмрд┐рдВрджреАрджрд╛рд░ рд░реЗрдЦрд╛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рд╣рдореЗрдВ рдПрдХ рддреНрд░рд┐рдХреЛрдг рдорд┐рд▓ рдЬрд╛рдП (рдКрдкрд░ рдЪрд┐рддреНрд░)ред рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЦреАрдВрдЪреА рдЧрдИ рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдЬрдВрдХреНрд╢рди рдкрд░ 90 рдбрд┐рдЧреНрд░реА рдХрд╛ рдХреЛрдг рдмрдирд╛ рд╣реИред рдпрджрд┐ рддреНрд░рд┐рднреБрдЬ рдореЗрдВ рдРрд╕рд╛ рдХреЛрдг рд╣реИ, рддреЛ рддреНрд░рд┐рднреБрдЬ рдХреЛ рдЖрдпрддрд╛рдХрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдХрд┐рдирд╛рд░реЗ, рдЬрд┐рд╕рдХреЗ рдмреАрдЪ рдХрд╛ рдХреЛрдг 90 рдбрд┐рдЧреНрд░реА рд╣реИ, рдХреЛ рдкреИрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рддреАрд╕рд░реА рдареЛрд╕ рд░реЗрдЦрд╛ (рдЬрд┐рд╕реЗ рд╣рдо рдЦреАрдВрдЪрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ) рдХреЛ рддреНрд░рд┐рднреБрдЬ рдореЗрдВ рдХрд░реНрдг рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрди рджреЛ рд╢реБрд░реВ рдХрд┐рдП рдЧрдП рдкреИрд░реЛрдВ (рдЪрд┐рддреНрд░рд╛ рдореЗрдВ рд╕реА 1 рдФрд░ рд╕реА 2) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдкрд╛рдпрдерд╛рдЧреЙрд░рд┐рдпрди рдкреНрд░рдореЗрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд░реНрдг рдХреА рд▓рдВрдмрд╛рдИ рдХреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред рдХрд░реНрдг рдХреА рд▓рдВрдмрд╛рдИ (рдпрд╛ рд░реЗрдЦрд╛ рдХреА рд▓рдВрдмрд╛рдИ) рдХрд╛ рд╕реВрддреНрд░ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реЛрдЧрд╛: 

=12+22


рджреЛрдиреЛрдВ рдкреИрд░реЛрдВ рдХреЛ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдпрд╣ рднреА рддреНрд░рд┐рднреБрдЬ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдм, рдКрдкрд░ рджрд┐рдП рдЧрдП рд╕реВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдХрд░реНрдг рдХреЛ рдЦреЛрдЬрддреЗ рд╣реИрдВ, рдЬреЛ рд▓рдВрдмреА рд░реЗрдЦрд╛ (рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛) рд╣реЛрдЧреА:

 drawLine(x1, y1, x2, y2, r, g, b) {
         const c1 = y2 - y1
         const c2 = x2 - x1

         const length = Math.sqrt(c1 * c1 + c2 * c2)

рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд░реЗрдЦрд╛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдиреЗ рдкрд┐рдХреНрд╕реЗрд▓ рдЦреАрдВрдЪреЗ рдЬрд╛рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЕрднреА рддрдХ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рдкрд┐рдХреНрд╕рд▓ рдХреЛ рдХреИрд╕реЗ рд╢рд┐рдлреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣реА рд╣реИ, рд╣рдореЗрдВ рдПрдХреНрд╕ 1, рд╡рд╛рдИ 1 рд╕реЗ рдПрдХреНрд╕ 2, рд╡рд╛рдИ 2 рддрдХ рдПрдХ рд░реЗрдЦрд╛ рдЦреАрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд▓рд╛рдЗрди рдХреА рд▓рдВрдмрд╛рдИ рд╣реЛрдЧреА, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 20 рдкрд┐рдХреНрд╕реЗрд▓ред рд╣рдо X1, y1 рдФрд░ x2, y2 рдореЗрдВ рдЕрдВрддрд┐рдо рдореЗрдВ 1 рдкрд┐рдХреНрд╕реЗрд▓ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрдВрдЯрд░рдореАрдбрд┐рдПрдЯ рдкрд┐рдХреНрд╕рд▓ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреИрд╕реЗ рдЦреЛрдЬреЗрдВ? рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рд╡рд╛рдВрдЫрд┐рдд рд▓рд╛рдЗрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдЕрдЧрд▓реЗ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЛ X1, y1 рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ рдХрд┐ рд╣рдо рдХрд┐рд╕ рддрд░рд╣ рдХреЗ рд╡рд┐рд╕реНрдерд╛рдкрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЕрдВрдХ [0, 0] рдФрд░ [0, 3] рд╣реИрдВ, рд╣рдореЗрдВ рдЙрди рдкрд░ рдПрдХ рд░реЗрдЦрд╛ рдЦреАрдВрдЪрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ [0, 0] рдХреЗ рдмрд╛рдж рдЕрдЧрд▓рд╛ рдмрд┐рдВрджреБ [0, 1] рдФрд░ рдлрд┐рд░ [0, 2] рдФрд░ рдЕрдВрдд рдореЗрдВ [0, 3] рд╣реЛрдЧрд╛ред рдпрд╣реА рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдВрджреБ рдХреЗ рдПрдХреНрд╕ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдпрд╛ рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ 0 рдкрд┐рдХреНрд╕реЗрд▓ рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рд╡рд╛рдИ рдХреЛ 1 рдкрд┐рдХреНрд╕реЗрд▓ рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣ рдСрдлрд╕реЗрдЯ рд╣реИредрдЗрд╕реЗ [0, 1] рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг: рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдмрд┐рдВрджреБ рд╣реИ [0, 0] рдФрд░ рдПрдХ рдмрд┐рдВрджреБ [3, 6], рдЪрд▓реЛ рд╣рдорд╛рд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ рд╡реЗ рдХреИрд╕реЗ рд╢рд┐рдлреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдкрд╣рд▓рд╛ рд╣реЛрдЧрд╛ [0, 0], рдлрд┐рд░ [0.5, 1], рдлрд┐рд░ [1, 2] рддрдм [рез.рел, рей] рдФрд░ рдЗрд╕реА рддрд░рд╣ [рей, рем], рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдСрдлрд╕реЗрдЯ [рел.рел, рез] рд╣реЛрдЧрд╛ред рдЗрд╕рдХреА рдЧрдгрдирд╛ рдХреИрд╕реЗ рдХрд░реЗрдВ? 

рдЖрдк рдирд┐рдореНрди рд╕реВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

   = 2 /  
  Y = 1 /   

рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдпрд╣ рд╣реЛрдЧрд╛:

const xStep = c2 / length
const yStep = c1 / length

рд╕рднреА рдбреЗрдЯрд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣реИ: рд▓рд╛рдЗрди рдХреА рд▓рдВрдмрд╛рдИ, рдПрдХреНрд╕ рдФрд░ рд╡рд╛рдИ рдХреЗ рд╕рд╛рде рдкрд┐рдХреНрд╕реЗрд▓ рдХреА рдСрдлрд╕реЗрдЯред рд╣рдо рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЪрдХреНрд░ рдореЗрдВ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:

for (let i = 0; i < length; i++) {
    this.drawPixel(
        Math.trunc(x1 + xStep * i),
        Math.trunc(y1 + yStep * i),
        r, g, b,
    )
}

рдкрд┐рдХреНрд╕реЗрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЗ X рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо X рд▓рд╛рдЗрди + рдСрдлрд╝рд╕реЗрдЯ X * рдХреА рд╢реБрд░реБрдЖрдд рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕ рдкреНрд░рдХрд╛рд░, i-th рдкрд┐рдХреНрд╕реЗрд▓ рдХрд╛ рд╕рдордиреНрд╡рдп рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реБрдП, рд╣рдо Y рд╕рдордиреНрд╡рдп рдХреА рдЧрдгрдирд╛ рднреА рдХрд░рддреЗ рд╣реИрдВред Math.trunc JS рдореЗрдВ рдПрдХ рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХрд┐рд╕реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рднрд┐рдиреНрдирд╛рддреНрдордХ рднрд╛рдЧ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рд╕рдВрдкреВрд░реНрдг рд╡рд┐рдзрд┐ рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

drawLine(x1, y1, x2, y2, r, g, b) {
    const c1 = y2 - y1
    const c2 = x2 - x1

    const length = Math.sqrt(c1 * c1 + c2 * c2)

    const xStep = c2 / length
    const yStep = c1 / length

    for (let i = 0; i < length; i++) {
        this.drawPixel(
            Math.trunc(x1 + xStep * i),
            Math.trunc(y1 + yStep * i),
            r, g, b,
        )
    }
}

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

рджрд░рд╛рдЬ рд╡рд░реНрдЧ рдХреЛрдб
class Drawer {
  surface = null
  width = 0
  height = 0

  constructor(surface, width, height) {
    this.surface = surface
    this.width = width
    this.height = height
  }

  drawPixel(x, y, r, g, b)  {
    const offset = (this.width * y + x) * 4

    this.surface[offset] = r
    this.surface[offset + 1] = g
    this.surface[offset + 2] = b
    this.surface[offset + 3] = 255
  }

  drawLine(x1, y1, x2, y2, r, g, b) {
    const c1 = y2 - y1
    const c2 = x2 - x1

    const length = Math.sqrt(c1 * c1 + c2 * c2)

    const xStep = c2 / length
    const yStep = c1 / length

    for (let i = 0 ; i < length ; i++) {
        this.drawPixel(
          Math.trunc(x1 + xStep * i),
          Math.trunc(y1 + yStep * i),
          r, g, b,
        )
    }
  }

  clearSurface() {
    const surfaceSize = this.width * this.height * 4
    for (let i = 0; i < surfaceSize; i++) {
      this.surface[i] = 0
    }
  }
}

рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реЛрдЧрд╛?


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

All Articles