рд╢реБрд░реБрдЖрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рд╢рд┐рдХрд╛рдпрдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ "рдЧреНрд░реАрдмрд▓" рдПрдХ рднрдпрд╛рдирдХ рд╢рдмреНрдж рд╣реИ рдЬрд┐рд╕реЗ рд╢рдмреНрджрдХреЛрд╖ рд╕реЗ рдЧрд╛рдпрдм рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИред
рдЦреИрд░, рдЖрддреНрдорд╛ рд╕реЗ рдкрддреНрдерд░ рдХреЛ рд╣рдЯрд╛рдХрд░, рд╣рдо рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдХреА рдУрд░ рдореБрдбрд╝рддреЗ рд╣реИрдВред Greeble рдПрдХ рдЫреЛрдЯреЗ рдкреИрдорд╛рдиреЗ рдкрд░ рджреЛрд╣рд░рд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рд╡рд░рдг рд╣реИрдВ рдЬреЛ рдЗрд╕реЗ рдПрдХ рдкреИрдорд╛рдиреЗ рдФрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реМрдВрджрд░реНрдпрд╢рд╛рд╕реНрддреНрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореЙрдбрд▓ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред рдорд╢рд░реВрдо рдХреНрд▓рд╛рд╕рд┐рдХ рд╡рд┐рдЬреНрдЮрд╛рди рдХрдерд╛ рдлрд┐рд▓реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реЛ рдЧрдП рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╢рд╛рд░реАрд░рд┐рдХ рдореВрд░реНрддрд┐рдХрд▓рд╛ рдЕрдХреНрд╕рд░ "рдореЙрдбрд▓" рдереА:
рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореЗрд░реЗ
рдПрдХреНрд╕рдЯреНрд░реВрдЬрд╝рди рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдЬрд╛рд▓ рдХреЛ рдХреИрд╕реЗ рдирд┐рдХрд╛рд▓рдирд╛ рд╣реИ, рддреЛ рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдорд╢рд░реВрдо рдХреЛ рдХреИрд╕реЗ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПред рдореЗрд╖ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓
рдорд╢рд░реВрдо рдЬреЛрдбрд╝рдирд╛ рд╕рднреА рдореЗрд╖ рдмрд╣реБрднреБрдЬреЛрдВ рдХреЛ рдПрдХ
рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд▓рдВрдмрд╛рдИ рддрдХ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдХреЗрд╡рд▓ рддреНрд░рд┐рднреБрдЬ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдкрд░ рджрд┐рдЦрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЫрд╡рд┐ рдЪреМрдХреЛрд░ рдорд╢рд░реВрдо рд╣реИред рдореБрдЭреЗ рдореЗрд╖ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рдкрдбрд╝рд╛ рддрд╛рдХрд┐ рдпрд╣ рдЪрддреБрд╖реНрдХреЛрдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛ рдЬрд╛рдП, рдФрд░ рдХрдИ рдореЗрд╖реЛрдВ рдореЗрдВ рдЕрдХреНрд╕рд░ рддреАрди рд╕реЗ рдЕрдзрд┐рдХ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╣реБрднреБрдЬ рд╣реЛрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЗрд╕ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рд╣рдо рд╕реАрдЦреЗрдВрдЧреЗ рдХрд┐
рдПрди рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рд╕рд╛рде рдмрд╣реБрднреБрдЬ рдХреЛ рдХреИрд╕реЗ
рдирд┐рдХрд╛рд▓рдирд╛ рд╣реИ рдФрд░ рдорд╢рд░реВрдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдкреВрд░реЗ рдЬрд╛рд▓ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИред рд╣рдо рдХрдо рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╢рд░реВрдорд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░рдиреЗ рдХреЗ рдХреБрдЫ рддрд░реАрдХреЗ рд╕реАрдЦрддреЗ рд╣реИрдВред
рд╕рддрд╣ рд╕рд╛рдорд╛рдиреНрдп
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ n рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╣реБрднреБрдЬ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдХреА рдЧрдгрдирд╛ рдХреИрд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рд╣рдо рдорд╛рди рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдмрд╣реБрднреБрдЬ
рдкреНрд▓рд╛рдиреЗрд░ рд╣реИ , рдЕрд░реНрдерд╛рдд рдЗрд╕рдХреЗ рд╕рднреА рдХреЛрдиреЗ рдПрдХ рд╣реА рддрд▓ рдкрд░ рд╣реИрдВ, рддреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рддреАрди рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╣реБрднреБрдЬ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИред
рд╕рддрд╣ рд╕рд╛рдорд╛рдиреНрдп рдмрд╣реБрднреБрдЬ рдХреЗ рдЪреЗрд╣рд░реЗ рдХреЗ рд▓рдВрдмрд╡рдд рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХреА рдЧрдгрдирд╛
рдмрд╣реБрднреБрдЬ рдХреЗ рдХрд┐рдирд╛рд░реЗ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рджреЛ рд╡реИрдХреНрдЯрд░ рдХреЗ
рд╡реЗрдХреНрдЯрд░ рдЙрддреНрдкрд╛рдж рдХреЛ рд▓реЗ рдХрд░ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдлрд┐рд░ рд╣рдо рдЗрд╕ рд╡реЗрдХреНрдЯрд░ рдХреЛ
рд╕рд╛рдорд╛рдиреНрдп рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЗрд╕рдХреА рд▓рдВрдмрд╛рдИ 1 рд╣реЛ, рдХреНрдпреЛрдВрдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд╕реЗ рд╕рддрд╣ рддрдХ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рджрд┐рд╢рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓рдВрдмрд╛рдИ рдХреА рдирд╣реАрдВред
рдлрд╝рдВрдХреНрд╢рди getFaceNormal (рдореЗрд╖, рдкрд╛рд▓реА)
Vec3 v1 = mesh: getVertex (рдкрд╛рд▓реА [1])
Vec3 v2 = mesh: getVertex (рдкрд╛рд▓реА [2])
Vec3 v3 = mesh: getVertex (рдкрд╛рд▓реА [3])
Vec3 e1 = v2 - v1
рд╡реА 3 рдП 2 = рд╡реА 3 - рд╡реА 2
рд╡реА 3 рд╕рд╛рдорд╛рдиреНрдп = рдИ 1: рдХреНрд░реЙрд╕ (рдИ 2)
рд╕рд╛рдорд╛рдиреНрдп рд▓реМрдЯреЗрдВ: рд╕рд╛рдорд╛рдиреНрдп рдХрд░реЗрдВ ()
рдЕрдВрдд
рдпрджрд┐ рд╣рдо рд╡рд┐рд╢реНрд╡рд╛рд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдмрд╣реБрднреБрдЬ рдкреНрд▓рд╛рдиреЗрд░ рд╣реИ, рддреЛ рдКрдкрд░ рдкреНрд░рд╕реНрддреБрдд рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЙрд╕ рд╡рд┐рдорд╛рди рдХреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдкрд╣рд▓реЗ рджреЛ рд╕реВрдЪрдХрд╛рдВрдХ рд╕реНрдерд┐рдд рд╣реИрдВред рдЙрд╕ рджрд┐рд╢рд╛ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдмрд╣реБрднреБрдЬ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╣рдо рдЗрд╕рдХреЗ рдмрдЬрд╛рдп
рдХрд┐рдирд╛рд░реЛрдВ рдХреЗ рд╕рднреА рд╡реЗрдХреНрдЯрд░ рдЙрддреНрдкрд╛рджреЛрдВ рдХрд╛ рдФрд╕рдд рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ:
рдлрд╝рдВрдХреНрд╢рди getFaceNormal (рдореЗрд╖, рдкрд╛рд▓реА)
Vec3 n = Vec3 (0, 0, 0)
i = 1 рдХреЗ рд▓рд┐рдП, # -2 -2 рдХрд░реЛ
Vec3 v1 = mesh: getVertex (рдкрд╛рд▓реА [1])
Vec3 v2 = mesh: getVertex (рдкрд╛рд▓реА [1+ i])
Vec3 v3 = mesh: getVertex (рдкрд╛рд▓реА [2+ i])
n: рдЬреЛрдбрд╝реЗрдВ ((v2 - v1): рдХреНрд░реЙрд╕ (v3 - v1))
рдЕрдВрдд
рд╡рд╛рдкрд╕реА n: рд╕рд╛рдорд╛рдиреНрдп рдХрд░реЗрдВ ()
рдЕрдВрдд
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдПрдХ рддрд▓реАрдп рдЪрддреБрд╖реНрдХреЛрдг рдХреЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИредextruding
рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рддрд╣ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рддреЛ рд╣рдо рдмрд╣реБрднреБрдЬ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рджрд┐рд╢рд╛ рдореЗрдВ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рд╕реАрдзреЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ рдХрд╣реЗрдВ, рдмрд╣реБрднреБрдЬ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕рддрд╣ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдкреБрд░рд╛рдиреЗ рдХреЛрдиреЗ рдХреЛ рдШреБрдорд╛рдХрд░ рдирдП рд╕рд┐рд░реЗ рдмрдирд╛рддреЗ рд╣реИрдВред
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА:
- рд╕рд╛рдорд╛рдиреНрдп рджрд┐рд╢рд╛ рдореЗрдВ рдкреБрд░рд╛рдиреЗ "рдирдП" рд╢рд┐рдЦрд░ рдмрдирд╛рдПрдВред
рдирдП рд╢реАрд░реНрд╖рдХреЛрдВ рдХреА рдЧрдгрдирд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:
(рдкреБрд░рд╛рдиреЗ рд╢рд┐рдЦрд░ рдХреА рд╕реНрдерд┐рддрд┐) + (рд╕рд╛рдорд╛рдиреНрдп рджрд┐рд╢рд╛)
рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╕рддрд╣ рдХреА рджрд┐рд╢рд╛ рдореЗрдВ рдкреБрд░рд╛рдиреА рд╕реНрдерд┐рддрд┐ рдХреЛ "рдмрджрд▓рд╛рд╡" рдХрд░рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдКрдкрд░ рджреА рдЧрдИ рдЫрд╡рд┐ рдХреЛ рджреЗрдЦреЗрдВ, рдЗрд╕ рдкрд░ v1 рд╕рд╛рдорд╛рдиреНрдп рджрд┐рд╢рд╛ рдореЗрдВ v5 рдХреА рдУрд░ рдмрдврд╝рддрд╛ рд╣реИред - рдирдП рдФрд░ рдкреБрд░рд╛рдиреЗ рдХреЛрдиреЗ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрддреБрд╖реНрдХреЛрдг рдмрдирд╛рдПрдВред
рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдирдП рдмрд╣реБрднреБрдЬ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд▓рд┐рдП, рдПрдХ рдирдпрд╛ рдЪрддреБрд░реНрднреБрдЬ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, v8, v7, v3 рдФрд░ v4 рд╕реЗ рдмрдиреЗ рдХреНрд╡рд╛рдб рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред - рдкреБрд░рд╛рдиреЗ рдмрд╣реБрднреБрдЬ рдХреЛ рдПрдХ рдирдП рдмрд╣реБрднреБрдЬ рд╕реЗ рдмрджрд▓рдХрд░ рдирдП рд╕рд┐рд░реЗ рд╕реЗ рдмрдирд╛рдПрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, v5, v6, v7 рдФрд░ v8 рд╕реЗ рдмрдиреЗ рдХреНрд╡рд╛рдб рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред
рдлрдВрдХреНрд╢рди рдПрдХреНрд╕рдЯреНрд░реВрдбрд▓реА (рдореЗрд╖, рдкреЙрд▓реАрдЗрдВрдбреЗрдХреНрд╕, рд▓рдВрдмрд╛рдИ)
int [] рдкрд╛рд▓реА = mesh.polys [рдкреЙрд▓реАрдЗрдВрдбреЗрдХреНрд╕]
int [] newPoly = []
Vec3 n = getFaceNormal (рдореЗрд╖, рдкрд╛рд▓реА)
- (1) рдПрдХреНрд╕рдЯреНрд░реВрдбреЗрдб рд╡рд░реНрдЯреНрд╕ рдмрдирд╛рдПрдВ
j = 1 рдХреЗ рд▓рд┐рдП, # рдХрд░реЗрдВ
рд╕реНрдерд╛рдиреАрдп рдкреА = рдореЗрд╖: getVertex (рдкрд╛рд▓реА [рдЬреЗ])
newPoly [#newPoly + 1] = # mesh.verts
- рд▓рдВрдмрд╛рдИ рдПрдХреНрд╕рдЯреНрд░реВрдЬрд╝рди рдХреА рд▓рдВрдмрд╛рдИ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ
рдЬрд╛рд▓: addertex (рдкреА + (рдПрди * рд▓рдВрдмрд╛рдИ))
рдЕрдВрдд
- (2) рдХреНрд╡рд╛рдб рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдирд╛ рдкрдХреНрд╖реЛрдВ
j0 = 1 рдХреЗ рд▓рд┐рдП, # рдХрд░реЗрдВ
рд╕реНрдерд╛рдиреАрдп j1 = j0% # рдкрд▓реНрд▓реА + 1
рдЬрд╛рд▓: addQuad (
рдкрд╛рд▓реА [рдЬреЗ реж],
рдкрд╛рд▓реА [j1],
newPoly [j1],
newPoly [j0]
)
рдЕрдВрдд
- (3) рдореМрдЬреВрджрд╛ рдЪреЗрд╣рд░реЗ рдХреЛ рдПрдХреНрд╕рдЯреНрд░реВрдбреЗрдб рд╡рд░реНрдЯреАрдХрд▓ рдкрд░ рд▓реЗ рдЬрд╛рдПрдВ
j = 1 рдХреЗ рд▓рд┐рдП, # рдХрд░реЗрдВ
mesh.polys [pi] [j] = newPoly [j]
рдЕрдВрдд
рдЕрдВрдд

рдПрдХ рд╕рдорд╛рди рдорд╢рд░реВрдо рдмрдирд╛рдирд╛редрд╕рднреА рдЬрд╛рд▓реА рдорд╢рд░реВрдо
рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ getSurfaceNormal () рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдПрдХреНрд╕рдЯреНрд░реВрдб () рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рддреЛ рдорд╢рд░реВрдо рдмрдирд╛рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ! рд╣рдо рдмрд╕
рдПрдХреНрд╕рдЯреНрд░реВрдб () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдореЗрд╖ рдмрд╣реБрднреБрдЬ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ ред рд╣рдо рдПрдХ
рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд▓рдВрдмрд╛рдИ рдХреЗ рд╕рд╛рде extruding рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ extruded рдмрд╣реБрднреБрдЬ рдХрд╛ рдЖрдХрд╛рд░ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реЛ, рдЬреЛ рдмрдирд╛рд╡рдЯ рдХреА рднрд╛рд╡рдирд╛ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдКрдкрд░ рдкреНрд░рд╕реНрддреБрдд рдХреНрдпреВрдм рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЪрддреБрд╖реНрдХреЛрдг рд╣реЛрддреЗ рд╣реИрдВред
рдлрд╝рдВрдХреНрд╢рди рдЧреНрд░реАрдмрд▓ (рдЬрд╛рд▓)
i = 1 рдХреЗ рд▓рд┐рдП, # mesh.polys рдХрд░рддреЗ рд╣реИрдВ
- рдпреЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдорд╛рди рдордирдорд╛рдиреА рд╣реИрдВ: рдкреА
рдлреНрд▓реЛрдЯ рдХреА рд▓рдВрдмрд╛рдИ = рдпрд╛рджреГрдЪреНрдЫрд┐рдХ: getUniformRange (0.1, 1.0)
рдПрдХреНрд╕рдЯреНрд░реВрдбреЗрдкреНрд░реЛрд▓реА (рдореЗрд╖, рдЖрдИ, рд▓рдВрдмрд╛рдИ)
рдЕрдВрдд
рд╡рд╛рдкрд╕реА рдХрд╛ рдЬрд╛рд▓
рдЕрдВрдд
рдмрдзрд╛рдИ рд╣реЛ, рд╣рдорд╛рд░реА рдорд╢рд░реВрдорд┐рдВрдЧ рдиреЗ рдХрдорд╛рдИ рдХреА рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдФрд░ рдЕрдзрд┐рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ! рдЕрдм рдорд╢рд░реВрдо рд▓рдЧрд╛рдирд╛ рдПрдХ рд╕рдорд╛рди рд╣реИред рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд░реЛрдЪрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрд╢реЛрдзрдиреЛрдВ рдХреЗ рджреЛ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджрд┐рдП рдЧрдП рд╣реИрдВред
рд╕рдВрд╢реЛрдзрди 1: рдореМрдЬ-рдорд╕реНрддреА рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдореМрдХреЗ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ
рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ: рдмрд╕ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд░ рдХреЛ рд░реЛрд▓ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдмрд╣реБрднреБрдЬ рдкрд░ рдорд╢рд░реВрдо рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдорд╢рд░реВрдо рд▓рдЧрд╛рдирд╛ рдХрдо рд╕рдорд╛рди рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдКрдкрд░ рдХреНрдпреВрдм рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред
i = 1 рдХреЗ рд▓рд┐рдП, # mesh.polys рдХрд░рддреЗ рд╣реИрдВ
<strong> рдпрджрд┐ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ: рд╕рдВрдпреЛрдЧ (0.33) рддреЛ </ strong>
рдлреНрд▓реЛрдЯ рдХреА рд▓рдВрдмрд╛рдИ = рдпрд╛рджреГрдЪреНрдЫрд┐рдХ (0.1, 1.0)
рдПрдХреНрд╕рдЯреНрд░реВрдбреЗрдкреНрд░реЛрд▓реА (рдореЗрд╖, рдЖрдИ, рд▓рдВрдмрд╛рдИ)
рдЕрдВрдд
рдЕрдВрдд
рд╡рд╛рдкрд╕реА рдХрд╛ рдЬрд╛рд▓
рдЕрдВрдд
рд╕рдВрд╢реЛрдзрди 2: рдПрдХреНрд╕рдЯреНрд░реВрдЬрд╝рди рд╕реНрдХреЗрд▓ рдЬреЛрдбрд╝реЗрдВ
рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреНрд░реВрдЬрд╝рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдмрджрд▓рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЬрдм рд╣рдо рдПрдХ extruded рдмрд╣реБрднреБрдЬ рдХреЗ рдХреЛрдиреЗ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░рд╛рд╢рд┐ рджреНрд╡рд╛рд░рд╛
рдмрд╣реБрднреБрдЬ рдХреЗ рдХреЗрдВрджреНрд░ рдХреА рдУрд░ рдЙрдиреНрд╣реЗрдВ рдХрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдПрдХреНрд╕рдЯреНрд░реВрдб () рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдирдП рдмрд╣реБрднреБрдЬ рдХреЗ рд╕рдВрдХреАрд░реНрдг рд╣реЛрдиреЗ рдХреА рдорд╛рддреНрд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ рд╡реА 3 рдХреЗ
scale
рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВрдЧреЗред рдХреЗрдВрджреНрд░ рдХреА рдУрд░ рдПрдХ рд╢реАрд░реНрд╖ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо
рд╕реНрдХреЗрд▓ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рдЗрд╕рдХреА
рдореВрд▓ рд╕реНрдерд┐рддрд┐ рдФрд░
рдмрд╣реБрднреБрдЬ рдХреЗ
рдХреЗрдВрджреНрд░ рдХреЗ рдмреАрдЪ
scale
рдХреЗ рдорд╛рди рд╕реЗ
рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ ред
(рдпрджрд┐ рдЖрдкрдХреЛ рдмрд╣реБрднреБрдЬ рдХреЗ рдХреЗрдВрджреНрд░ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдЬрд▓реНрджреА рд╕реЗ
рддреНрд░рд┐рдХреЛрдгрд╛рд╕рди рдкрд░ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдореЗрдВ рдХреВрджрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдФрд░ рдорд┐рдбрдкреЙрдЗрдВрдЯ рдХреЗ рддреНрд░рд┐рдХреЛрдгреАрдпрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝рддрд╛ рд╣реВрдВред)
- рдкрд╛рд▓реА рдХрд╛ рдХреЗрдВрджреНрд░ рдвреВрдВрдвреЗрдВ
Vec3 c = mesh: getFaceCentroid (рдкреЙрд▓реА)
j = 1 рдХреЗ рд▓рд┐рдП, # рдХрд░реЗрдВ
рд╕реНрдерд╛рдиреАрдп рдкреА = рдореЗрд╖: getVertex (рдкрд╛рд▓реА [рдЬреЗ])
newPoly [#newPoly + 1] = # mesh.verts
рд╕реНрд╡рдпрдВ: addVertex (
math.lerp (cx, px, scale.x) + nx * рд▓рдВрдмрд╛рдИ,
math.lerp (cy, py, scale.y) + ny * рд▓рдВрдмрд╛рдИ,
math.lerp (cz, pz, scale.z) + nz * рд▓рдВрдмрд╛рдИ
)
рдЬрд╛рд▓: addertex (рдкреА + (рдПрди * рд▓рдВрдмрд╛рдИ))
рдЕрдВрдд
рдЕрдм рдЖрдк рдЗрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдмрд╣реБрднреБрдЬ рдХреЗ рд▓рд┐рдП рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдорд╛рди рджреНрд╡рд╛рд░рд╛ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рддреЛ рд╣рдореЗрдВ рдКрдкрд░ рджрд┐рдЦрд╛рдИ рдЧрдИ рдЗрдореЗрдЬ рдорд┐рд▓рддреА рд╣реИред
рдлрд╝рдВрдХреНрд╢рди рдЧреНрд░реАрдмрд▓ (рдЬрд╛рд▓)
i = 1 рдХреЗ рд▓рд┐рдП, # mesh.polys рдХрд░рддреЗ рд╣реИрдВ
рдлреНрд▓реЛрдЯ рдХреА рд▓рдВрдмрд╛рдИ = рдпрд╛рджреГрдЪреНрдЫрд┐рдХ: getUniformRange (0.1, 1.0)
Vec3 рд╕реНрдХреЗрд▓ = (рдпрд╛рджреГрдЪреНрдЫрд┐рдХ: getUniformRange (0.1, 1.0),
рдпрд╛рджреГрдЪреНрдЫрд┐рдХ: getUniformRange (0.1, 1.0),
рдпрд╛рджреГрдЪреНрдЫрд┐рдХ: getUniformRange (0.1, 1.0)
extrudePoly (рдореЗрд╖, рдЖрдИ, рд▓рдВрдмрд╛рдИ, рд╕реНрдХреЗрд▓)
рдЕрдВрдд
рд╡рд╛рдкрд╕реА рдХрд╛ рдЬрд╛рд▓
рдЕрдВрдд
рдЕрдВрдд
рдорд╣рд╛рди, рд╣рдо рдЕрдВрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд┐рд▓ рдЧрдпрд╛! рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдЖрдкрдХреЗ рд▓рд┐рдП рдорджрджрдЧрд╛рд░ рд░рд╣рд╛ рд╣реЛрдЧрд╛ред