рд╕реА рдореЗрдВ рд░реЗрдВрдбрд░рд┐рдВрдЧ рд░реЗрдВрдбрд░рд┐рдВрдЧ

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

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЕрдкрдиреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред



рдХрд┐рд░рдг рдЕрдиреБрд░реЗрдЦрдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж


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

рдкреБрдирд░рд╛рд╡рд░реНрддреА рд░реЗ рдврд▓рд╛рдИ == рд░реЗ рдЕрдиреБрд░реЗрдЦрдг



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



рд░реЗрдВрдбрд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░


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

рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░реЗрдВрдбрд░ рдХреИрд╕реЗ рд╕рд┐рдЦрд╛рдирд╛ рд╣реИ?

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

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

C рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ OOP рдкреНрд░рддрд┐рдорд╛рди рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдкреЙрдЗрдВрдЯрд░реНрд╕ рдмрдЪрд╛рд╡ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ ред

рд░реЗрдВрдбрд░ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╕рдВрд░рдЪрдирд╛рдУрдВ (рдСрдмреНрдЬреЗрдХреНрдЯ 3 рдбреА) рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд▓рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдбреЗрдЯрд╛ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ 3 рдбреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЙрди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдбреЗрдЯрд╛ рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд░реЗрдВрдбрд░ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ Object3d рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг
typedef struct { //    ,     //   :  ,  (   ),   //   :  , ,  .. void * data; //   ,    , //     data Boolean (*intersect)(const void * data, const Point3d ray_start_point, const Vector3d ray, //         Point3d * const intersection_point); //      //       //      //       :) Color (*get_color)(const void * data, const Point3d intersection_point); //       (   ) //      -      //  ,    -      Vector3d (*get_normal_vector)(const void * data, const Point3d intersection_point); //     Object3d //    ,    // ,   void (*release_data)(void * data); } Object3d; 





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

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ: рд░реЗрдВрдбрд░ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдХреЛрдб рдХреНрд╖реЗрддреНрд░
sphere.c
 // ...  typedef struct { Point3d center; Float radius; Color color; } Sphere; // ...   // ""  Object3d * new_sphere(const Point3d center, const Float radius, const Color color) { Sphere * sphere = malloc(sizeof(Sphere)); sphere->center = center; sphere->radius = radius; sphere->color = color; //      3D  Object3d * obj = malloc(sizeof(Object3d)); obj->data = sphere; //  ,      Sphere obj->get_color = get_sphere_color; obj->get_normal_vector = get_sphere_normal_vector; obj->intersect = intersect_sphere; obj->release_data = release_sphere_data; return obj; } //     //        static Color get_sphere_color(const void * data, const Point3d intersection_point) { const Sphere * sphere = data; return sphere->color; } //          //    Bump Mapping static Vector3d get_sphere_normal_vector(const void * data, const Point3d intersection_point) { const Sphere * sphere = data; // vector3dp -  ,       Vector3d n = vector3dp(sphere->center, intersection_point); normalize_vector(&n); return n; } //     static Boolean intersect_sphere(const void * data, const Point3d ray_start_point, const Vector3d ray, Point3d * const intersection_point) { const Sphere * sphere = data; //        -     //         GitHub } // ""  void release_sphere_data(void * data) { Sphere * sphere = data; //      -       free(sphere); } 


рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рд╛рдЗрдореЗрдЯрд┐рд╡ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг
 void example(void) { Object3d * objects[2]; //  ,     (10, 20, 30)   100 objects[0] = new_sphere(point3d(10, 20, 30), 100, rgb(255, 0, 0)); //     (0, 0, 0), (100, 0, 0)  (0, 100, 0) objects[1] = new_triangle(point3d(0, 0, 0), point3d(100, 0, 0), point3d(0, 100, 0), rgb(0, 255, 0)); Point3d camera = point3d(0, 0, -100); Vector3d ray = vector3df(0, -1, 0); int i; for(i = 0; i < 2; i++) { Object3d * obj = objects[i]; Point3d intersection_point; if(obj->intersect(obj->data, camera, ray, &intersection_point)) { //            Color c = obj->get_color(obj->data, intersection_point); //  -  :-) // ,      //     ,      objects! } } } 


рдиреНрдпрд╛рдп рдХреА рдЦрд╛рддрд┐рд░, рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХрд░рддрдм рджрд┐рдЦрд╛рддреА рд╣реИред

рдЧрддрд┐ рдкреНрд░рджрд╛рди рдХрд░рдирд╛


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



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

рдкреЙрд╕рд┐рдХреНрд╕ рдереНрд░реЗрдбреНрд╕

рдкрд╣рд▓реА рдЫрд╛рдк: рдЬрд╛рд╡рд╛ рдереНрд░реЗрдбреНрд╕ рдХреЗ рд╢рдмреНрджрд╛рд░реНрде pthreads рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, POSIX рдереНрд░реЗрдб рдореЙрдбрд▓ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рд╕рдорд╕реНрдпрд╛рдПрдВ рдирд╣реАрдВ рдереАрдВред рдореЗрд░рд╛ рдереНрд░реЗрдб рдкреВрд▓ рджрд░реНрдЬ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ :-)

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

рд░реЗрдВрдбрд░рд┐рдВрдЧ рдПрдирдХреИрдкреНрд╕реБрд▓реЗрдЯрд┐рдВрдЧ рдлрдВрдХреНрд╢рди рд╕рд┐рдЧреНрдиреЗрдЪрд░
 void render_scene(const Scene * const scene, const Camera * const camera, Canvas * canvas, const int num_threads); //  Scene  3D ,  ,      //  Camera  ,      //  Canvas  2   -       


рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЪрдХреНрд░ рдФрд░ рдереНрд░реЗрдб рдкреВрд▓ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдб рд╢рд╛рдорд┐рд▓ рдерд╛, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХрд░реНрддрд╡реНрдпреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдереЗ:

рд▓реЗрдХрд┐рди, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдПрдХ 2-рдХреЛрд░ рд▓реИрдкрдЯреЙрдк рдкрд░, рд░реЗрдВрдбрд░ рд╕рдордп-рд╕рдордп рдкрд░ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЧрдпрд╛ рдпрд╛ рдПрдмреЙрд░реНрдЯ рдЯреНрд░реИрдк 6 рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЧрдпрд╛ (рдФрд░ рдпрд╣ 4-рдХреЛрд░ рд▓реИрдкрдЯреЙрдк рдкрд░ рдХрднреА рдирд╣реАрдВ рд╣реБрдЖ)ред рдореИрдВрдиреЗ рдЗрд╕ рдЙрджрд╛рд╕ рдмрдЧ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рд▓реЗрдХрд┐рди рдЬрд▓реНрдж рд╣реА рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рдЖрдХрд░реНрд╖рдХ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рдЧрдпрд╛ред

OpenMP

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

рд╕реНрд░реЛрдд рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд╛рд░реНрдп
 void render_scene(const Scene * const scene, const Camera * const camera, Canvas * canvas, const int num_threads) { const int width = canvas->width; const int height = canvas->height; const Float focus = camera->focus; //    omp_set_num_threads(num_threads); int x; int y; //   ,      :-) #pragma omp parallel private(x, y) #pragma omp for collapse(2) schedule(dynamic, CHUNK) for(x = 0; x < width; x++) { for(y = 0; y < height; y++) { const Vector3d ray = vector3df(x, y, focus); const Color col = trace(scene, camera, ray); set_pixel(i, j, col, canvas); } } } 



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

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

рдХреЗрдбреА-рдЯреНрд░реА


рдЖрдЗрдП рд╡рд╕реНрддреБрдУрдВ рдХреЛ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ: "рдмрд╛рдПрдВ" рдФрд░ "рджрд╛рдПрдВ" (рд╣рдо рдХреНрд░рдорд╢рдГ рдПрд▓ рдФрд░ рдЖрд░ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рддреЗ рд╣реИрдВ:)

рдЪреВрдВрдХрд┐ рд╣рдо рджреГрд╢реНрдп рдХреЛ рд╕рдордиреНрд╡рдп рдЕрдХреНрд╖реЛрдВ рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдЬрд▓реНрджреА рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рджреГрд╢реНрдп рдХрд╛ рдХреМрди рд╕рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдХрд┐рд░рдг рдкрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдк рд╕рдВрднрд╡ рд╣реИрдВ:


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

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдмреАрдо 2 рдХреЛ рдЯреНрд░реЗрд╕ рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджреЗрдЦреЗрдВ:

  1. рдХрд┐рд░рдг рдкрд╣рд▓реЗ рджреГрд╢реНрдп рдХреЗ рдмрд╛рдПрдВ рдЦрдВрдб (L) рдХреЛ рдкрд╛рд░ рдХрд░рддреА рд╣реИ, рдлрд┐рд░ рджрд╛рдПрдВ - R рдХреЛ
  2. рднрд╛рдЧ L рд╕реЗ - рдХрд┐рд░рдг рдХреЗрд╡рд▓ LL рдЦрдВрдб рдХреЛ рдкрд╛рд░ рдХрд░рддреА рд╣реИ
  3. рдПрд▓рдПрд▓ рдЦрдВрдб рдореЗрдВ рдХреЛрдИ рд╡рд╕реНрддреБ рдирд╣реАрдВ рд╣реИ
  4. рджреГрд╢реНрдп рдХреЗ рджрд╛рд╣рд┐рдиреЗ рдЖрдзреЗ рднрд╛рдЧ рдкрд░ рдЬрд╛рдПрдВ - рдЖрд░
  5. рджреГрд╢реНрдп рдХреЗ рдареАрдХ рдЖрдзреЗ рднрд╛рдЧ рдореЗрдВ, рдХрд┐рд░рдг рдкрд╣рд▓реЗ рдЖрд░рдПрд▓ рдЦрдВрдб рдХреЛ рдкрд╛рд░ рдХрд░рддреА рд╣реИ, рдФрд░ рдлрд┐рд░ рдЖрд░рдЖрд░
  6. рдЖрд░рдПрд▓ рджреГрд╢реНрдп рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ, рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдмреАрдо рдХрд╛ рдЪреМрд░рд╛рд╣рд╛ рдорд┐рд▓рд╛
  7. рдЯреНрд░реЗрд╕ рдкреВрд░рд╛

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

рднреВрддрд▓ рдХреНрд╖реЗрддреНрд░ рд╣реЗрдпреБрд░рд┐рд╕реНрдЯрд┐рдХ

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



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



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

рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ

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

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

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

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

16386 рддреНрд░рд┐рдХреЛрдг рд╡рд╛рд▓реЗ рджреГрд╢реНрдп:


рдореЙрдбрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ

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

рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдореЙрдбрд▓ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг: tetrahedron.obj
# рдЯреЗрдЯреНрд░рд╛рд╣реЗрдбреНрд░реЙрди

# рд╡рд░реНрдЯреЗрдХреНрд╕:
v 1.00 1.00 1.00
v 2.00 1.00 1.00
v 1.00 2.00 1.00
v 1.00 1.00 2.00

# рддреНрд░рд┐рдХреЛрдг:
рдЪ 1 3 2
рдЪ 1 4 3
рдЪ 1 2 4
f 2 3 4

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

рдкреНрд░рд╕реНрддреБрддрд┐рдХрд░рдг рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рддреНрд░рд┐рднреБрдЬ 3 рдбреА рд╕рдВрд░рдЪрдирд╛
 typedef struct { //   Point3d p1; Point3d p2; Point3d p3; //  ,     //      -       Vector3d norm; Color color; Material material; //    -   ,    color Canvas * texture; //   //   ,    Point2d t1; Point2d t2; Point2d t3; //     //        Vector3d n1; Vector3d n2; Vector3d n3; //      //      } Triangle3d; 


рдкреНрд░рд╕реНрддреБрдд рджреГрд╢реНрдп рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬрд┐рд╕рдореЗрдВ рд▓рдЧрднрдЧ 19,000 рдмрд╣реБрднреБрдЬ рд╣реИрдВ:


рд▓рдЧрднрдЧ 22,000 рдмрд╣реБрднреБрдЬреЛрдВ рд╡рд╛рд▓реЗ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рджреГрд╢реНрдп рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:


рдордЬрд╝реЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдПрдХ рд╕реНрдХрд╛рдИрдмреЙрдХреНрд╕ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдХрд╛рд░ рдореЙрдбрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛:
рдЗрд╕ рджреГрд╢реНрдп рдореЗрдВ рд▓рдЧрднрдЧ 100,000 рдмрд╣реБрднреБрдЬ рд╣реИрдВ (рдХреБрдЫ рд╣реА рдорд┐рдирдЯреЛрдВ рдореЗрдВ рдПрдХ kd рдкреЗрдбрд╝ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛)



рдирд┐рд╖реНрдХрд░реНрд╖


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

Github рд░реЗрдВрдбрд░ рд╕реЛрд░реНрд╕: github.com/lagodiuk/raytracing-render (рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрд╢рди рдореЗрдВ- рдбреЗрдореЛ рдХреИрд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ)ред

рдЕрдзреНрдпрдпрди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, 2 рдкреБрд╕реНрддрдХреЛрдВ рдиреЗ рдореБрдЭреЗ рдмрд╣реБрдд рдорджрдж рдХреА:

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

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

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рд╕реА рдХреА рдХреБрдЫ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдкрд░ рд╕рд▓рд╛рд╣ рдХреЗ рд▓рд┐рдП dmytrish рдХреЛ рдзрдиреНрдпрд╡рд╛рдж рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдФрд░ рдЦрд┐рдбрд╝рдХреА рдХреЗ рджреГрд╢реНрдп рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдХреИрдорд░реЗ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рдШреБрдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреАрдмреЛрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП (GLUT рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд┐рдд рд╕реАрдорд╛ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдореИрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рд╕рдВрд╕рд╛рдзрди рдХреА рднреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ: рд░реЗ- modcing.ru - рдпрд╣рд╛рдВ, рдПрдХ рд╕реБрд▓рдн рд░реВрдк рдореЗрдВ, рд╡рд┐рднрд┐рдиреНрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд┐ рдлреЛрдЯреЛрд░реЗрд▓рд┐рд╕реНрдЯрд┐рдХ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдХреЗрдбреА-рдЯреНрд░реА рдФрд░ рдПрд╕рдПрдПрдЪ)ред

рдкреБрдирд╢реНрдЪ
рд░реЗрдВрдбрд░ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдмрдирд╛рдП рдЧрдП рдХрдИ рд╡реАрдбрд┐рдпреЛ:

рдХреЛрд╣рд░реЗ рдореЗрдВ Sierpinski рдкрд┐рд░рд╛рдорд┐рдб


рдШрди, рдЖрджрдореА, рд▓рд╛рд▓рдЯреЗрди, рдЪрд╛рдпрджрд╛рдиреА рдФрд░ Sierpinski рдкрд┐рд░рд╛рдорд┐рдб :-)



рдпреБрдкреАрдбреА:
рдпрд╣ рдкреЗрдбрд╝ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдореЗрдВ рддреЗрдЬреА рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдХрд▓рд╛ред рдЯрд┐рдкреНрдкрдгреА рдзрд╛рдЧрд╛ рдореЗрдВ рд╡рд┐рд╡рд░рдг: habrahabr.ru/post/187720/#comment_6580722

UPD 2:
рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреЗ рдмрд╛рдж: habrahabr.ru/post/187720/#comment_6579384 - рдПрдВрдЯреА-рдЕрд▓рд┐рдпрд╛рд╕рд┐рдВрдЧ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рджред рдЕрдм рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдЫрд╡рд┐рдпрд╛рдВ рдмрд╣реБрдд рд╕реБрдВрджрд░ рд▓рдЧрддреА рд╣реИрдВ :)

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


All Articles