рдирдорд╕реНрдХрд╛рд░, рдкреНрдпрд╛рд░реЗ рдЦрдмреНрд░реЛрд╡рд┐рддреНрд╕ред рдпрд╣ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ: рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдХреНрд░рдо рдореЗрдВред
рдкрд░рд┐рдЪрдп
рдкрде рдЕрдиреБрд░реЗрдЦрдг рдкреНрд░рдХрд╛рд╢рд┐рдХреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрднрд╛рд╕реА рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рджреГрд╢реНрдпреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреА рдПрдХ рд╡рд┐рдзрд┐ рд╣реИред
рддреНрд░рд┐-рдЖрдпрд╛рдореА рдЕрдВрддрд░рд┐рдХреНрд╖ рдореЗрдВ, рдкреНрд░рдХрд╛рд╢ рд╕реНрд░реЛрдд рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реА рдХрд┐рд░рдгреЗрдВ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рд╣реЛрддреА рд╣реИрдВ (рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдХрд┐рддрдиреЗ, рдХрд┐рддрдиреЗ рдлреЛрдЯреЙрди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИрдВ) рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдХрд┐рд░рдг рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬрдм рдПрдХ рдХрд┐рд░рдг рдПрдХ рдмрд╛рдзрд╛ рд╕реЗ рдорд┐рд▓рддреА рд╣реИ, рддреЛ рдХрдИ рдШрдЯрдирд╛рдПрдВ рд╕рдВрднрд╡ рд╣реИрдВ: рдЕрд╡рд╢реЛрд╖рдг, рдкреНрд░рддрд┐рдмрд┐рдВрдм, рдЕрдкрд╡рд░реНрддрдиред рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдмрд╛рдзрд╛ рдХреА рд╕рд╛рдордЧреНрд░реА рдФрд░ рдмреАрдо рдХреЗ рд░рдВрдЧ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред рдЬреЛ рдХрд┐рд░рдгреЗрдВ рдХреИрдорд░реЗ рд╕реЗ рдЯрдХрд░рд╛рддреА рд╣реИрдВ, рд╡реЗ рд╕реНрдХреНрд░реАрди рдкрд░ рдЖ рдЬрд╛рддреА рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдкрд░ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣реА рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдкреНрд░рдХрд╛рд╢рд┐рдХреА рд╕рдордп рдореЗрдВ рдЖрдЗрд╕реЛрдЯреНрд░реЛрдкрд┐рдХ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рдордп рдХреА рджреЛрдиреЛрдВ рджрд┐рд╢рд╛рдПрдВ рд╕рдорд╛рди рд╣реИрдВред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕реНрд░реЛрдд рд╕реЗ рдЖрдВрдЦ рддрдХ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЖрдВрдЦ рд╕реЗ рд╕реНрд░реЛрдд рддрдХ рдХрд┐рд░рдгреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИ, рдкрде рдЕрдиреБрд░реЗрдЦрдг рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рд╣реИ, рдЖрдкрдХреЛ рд╕рдордп рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдХрд┐рд░рдгреЛрдВ рдХреЛ рдмрд░реНрдмрд╛рдж рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдЦреАрдВрдЪрдиреЗ рдХрд╛ рдХреЛрдИ рдореМрдХрд╛ рдирд╣реАрдВ рд╣реИред
рд╡рд┐рдЪрд╛рд░
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдХрд┐рд░рдгреЛрдВ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдлреЛрдЯреЙрдиреЛрдВред рдпрд╣ рд╡рд╣реА рдмрд╛рдд рд╣реИ! рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░ рджреВрдВрдЧрд╛ред рдПрдХ рджрд┐рд╢рд╛ рдореЗрдВ, рдПрдХ рд╕рд╛рде рдХрдИ
рдореЛрдиреЛрдХреНрд░реЛрдореИрдЯрд┐рдХ рдлреЛрдЯреЙрди рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░реЗрдВред рдЬрд╣рд╛рдВ рдкрд╣рд▓реЗ рд╕рд┐рдВрдЧрд▓ рдмреАрдо рд╣реБрдЖ рдХрд░рддреА рдереА, рдЕрдм 16, 32, 64 ... 720, 700, ..., 450 рдПрдирдПрдо рдХреЗ рддрд░рдВрдЧ рджреИрд░реНрдзреНрдп рд╡рд╛рд▓реЗ рдХрд┐рддрдиреЗ рдлреЛрдЯреЙрди рдирд╣реАрдВ рд╣реИрдВред рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреА рдЕрдкрдиреА рдХрд╣рд╛рдиреА рд╣реЛ рд╕рдХрддреА рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рд╕рдордЭ рдореЗрдВ рдЖрдПрдЧрд╛ рдЬрдм рд╕рд╛рдордЧреНрд░реА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдкрд░ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдлреЛрдЯреЙрдиреЛрдВ рдХреА рджрд┐рд╢рд╛ рдмрджрд▓рддреА рд╣реИред
рд╕реНрдХреВрд▓ рднреМрддрд┐рдХреА рд╕реЗ рдпрд╣ рдЬреНрдЮрд╛рдд рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рдХрд╛рд╢ рдХреЗ рдлреИрд▓рд╛рд╡ рдХрд╛ рдХрд╛рд░рдг рд╣реИред рдкреНрд░рдХрд╛рд╢ рдлреИрд▓рд╛рд╡ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдЕрдкрд╡рд░реНрддрдХ рд╕реВрдЪрдХрд╛рдВрдХ рдлреЛрдЯреЙрди рдХреА рдЖрд╡реГрддреНрддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдкреБрд░рд╛рдиреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рдЗрд╕ рдмрд╣реБрдд рднрд┐рдиреНрдирддрд╛ рдХреЛ рдорд╣рд╕реВрд╕ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╣реАрд░рд╛ред
рд╕реНрдпреВрдбреЛрдХреЛрдб рдкрд░, рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
i = 0..screen_h-1 j = 0..screen_w-1 double x = 2*j/screen_w-1; double y = 2*i/screen_h-1; table[i, j] = norm(center+x*left+y*up); n = 0..samples_num-1 i = 0..screen_h-1 j = 0..screen_w-1 freq = 0..color_quality-1 power = 0; Ray r = ray_from_vecs(eye, table[i, j]); trace(&r, &power, freq); screen[i*w+j] = screen[i*w+j]+power*rgb_from_freq(freq); i = 0..screen_h-1 j = 0..screen_w-1 screen[i*w+j] /= samples_num;
рдпрд╣рд╛рдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ, рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИред freq - рдкреНрд░рдХрд╛рд╢ рддрд░рдВрдЧ рдЖрд╡реГрддреНрддрд┐, рд╕реНрдХреНрд░реАрди_рд╡, рд╕реНрдХреНрд░реАрди_рд╣ - рдкрд┐рдХреНрд╕рд▓ рдореЗрдВ рд╕реНрдХреНрд░реАрди рдХреА рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдКрдВрдЪрд╛рдИ, рдирдореВрдиреЗ_рдирдо - рдирдореВрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред рд╕рд╣реА рд░рдВрдЧ рд╕рднреА рдирдореВрдиреЛрдВ рдХрд╛ рдЕрдВрдХрдЧрдгрд┐рдд рдорд╛рдзреНрдп рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдирдореВрдиреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЕрдирдиреНрддрддрд╛ рдХреА рдУрд░ рдЬрд╛рддреА рд╣реИред рдлреЛрдЯреЙрдиреЛрдВ рдХреА рджрд┐рд╢рд╛рдУрдВ рдХреЗ рд╡реИрдХреНрдЯрд░ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рд░реВрдк рдореЗрдВ рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рд╣рд░ рдмрд╛рд░ рдЧрдгрдирд╛ рди рдХреА рдЬрд╛ рд╕рдХреЗред рдЙрдирдХреА рдЧрдгрдирд╛ рдПрдХ рд╕рд░рд▓ рд╕реВрддреНрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реНрдХреНрд░реАрди рдХреЗ рдХреЗрдВрджреНрд░ рдХреА рдУрд░ рдЗрд╢рд╛рд░рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡реИрдХреНрдЯрд░, рд╕реНрдХреНрд░реАрди рдХреЗ рдмрд╛рдИрдВ рдФрд░ рд╢реАрд░реНрд╖ рд╕реАрдорд╛ рднреА рднрд╛рдЧ рд▓реЗрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдкрд╣рд▓реВ рдЕрдиреБрдкрд╛рдд 4: 3 рд╣реИ, рддреЛ рдЖрдк рдЪрдпрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
center = (0, 0, 0) left = (4, 0, 0) up = (3, 0, 0)
рдмреЗрд╢рдХ, рдпрд╣ рд╕рдм рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
рдЕрдм рдЯреНрд░реЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЗрд╕рдореЗрдВ рдЬрд╛рджреВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдмреАрдо рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рджрд┐рд╢рд╛ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЗрд╕рдХреА рдЖрд╡реГрддреНрддрд┐ рднреА рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рд╢рдХреНрддрд┐ рд╢реВрдиреНрдп рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рд╡рд╣ рдПрдХ рдирдИ рд╕реНрдерд┐рддрд┐ рдФрд░ рджрд┐рд╢рд╛ рдФрд░ рд╢рдХреНрддрд┐ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рд╣рдо рд╕реНрдерд┐рддрд┐ рдФрд░ рджрд┐рд╢рд╛ рдореЗрдВ рд░реБрдЪрд┐ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЯреНрд░реЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХрд╣рд╛ рдЬрд╛ рд╕рдХреЗред
рд░рдВрдЧ - рдПрдХ рд╕рд░рдгреА рдЬрд┐рд╕рдХрд╛ рдЖрдХрд╛рд░ рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдХреЗ рдЙрдиреНрдирдпрди рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
рдЫрджреНрдо рдХреЛрдб рдлрд┐рд░ рд╕реЗ
void trace() { Vec n;
рдмреЗрд╢рдХ, рдпрд╣ рдЫрджреНрдо рдХреЛрдб рдХреБрдЫ рднреА рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдкрд╡рд░реНрддрди рдФрд░ рд╕реНрдкреЗрдХреНрдпреБрд▓рд░ рдкрд░рд╛рд╡рд░реНрддрди рдХреА рд╡рд┐рднрд┐рдиреНрди рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╛ рдлрд┐рд░ рдХрд┐рд╕реА рддрд░рд╣ рдореЙрдбрд▓ рдХреЛ рдЙрд▓рдЭрд╛рдПрдВред рдпрд╣рд╛рдВ рдореБрдЦреНрдп рдмрд╛рдд - рд╕рдВрднрд╛рд╡рдирд╛рдПрдВ рдФрд░ рдЕрдкрд╡рд░реНрддрдХ рд╕реВрдЪрдХрд╛рдВрдХ рдЖрд╡реГрддреНрддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдлреЛрдЯреЙрди рдХрд╛ рдЕрдкрдирд╛ рд╣реИред
рдореИрдВрдиреЗ Google рдореЗрдВ рдкрде рдЕрдиреБрд░реЗрдЦрдг рдХреЗ рд▓рд┐рдП рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рджреЗрдЦрд╛ рдФрд░ рдкреНрд░рдХрд╛рд╢ рдХрд╛ рдлреИрд▓рд╛рд╡ рдирд╣реАрдВ рджреЗрдЦрд╛ред рдореЛрдиреЛрдХреНрд░реЛрдореИрдЯрд┐рдХ рдкрде рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦреЛрдЬ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рджрд┐рдЦрд╛ред рдореИрдВрдиреЗ рдкреВрд░реЗ рдкрд╣рд▓реЗ рдкреГрд╖реНрда рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХреА, рд╣рд░ рдЬрдЧрд╣ рдпреЗ рд╢рдмреНрдж рджреВрд╕рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдЭрд╛ рдХрд┐рдП рдЧрдП рд╣реИрдВ рдФрд░ рд▓реЗрдЦ рдореЗрдВ рд╣реА рдореЗрд░рд╛ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рд╣реИред
рдмреЗрд╢рдХ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЙрди рдкреБрд╕реНрддрдХреЛрдВ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ рдЬреЛ рдореИрдВ рдЕрднреА рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрд╛ рд╣реВрдВред
рдкрд░рд┐рдгрд╛рдо
рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рдЬреАрдирд┐рдпрд╕ рд╣реЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ: рдореЛрдиреЛрдХреНрд░реЛрдореИрдЯрд┐рдХ рдлреЛрдЯреЙрдиреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ 16, 32, рдХрд╛ рдЦрд░реНрдЪ рдЖрдПрдЧрд╛ ... рдорд╛рдирдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо (рд░рдВрдЧ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ) рд╕реЗ рдЕрдзрд┐рдХ рдорд╣рдВрдЧрд╛ рд╣реИред рдЕрдм рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкрд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рдореЗрдВ рдкрде рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ рдФрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрдм рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ "рдореЛрдиреЛрдХреНрд░реЛрдореИрдЯрд┐рдХ" рдЯреНрд░реЗрд╕ рдФрд░ рднреА рдорд╣рдВрдЧрд╛ рд╣реИред