рддреАрди рдЖрдпрд╛рдореА рдореЙрдбрд▓ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдкреАрдврд╝реА



рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдкреАрдврд╝реА рдПрдХ рдЕрджреНрднреБрдд рдЪреАрдЬ рд╣реИ! рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ, рдЦрд╛рд╕рдХрд░ рддреАрди-рдЖрдпрд╛рдореА рд╡рд╛рд▓реЗ - рдЖрдк рддреБрд░рдВрдд рдкрд░рд┐рдгрд╛рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдмрд╕ рдПрдХ-рджреЛ рдирд┐рд░реНрджреЗрд╢ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рдХрд┐ рддреНрд░рд┐рдХреЛрдг рдХрд╛ рдПрдХ рдмрд╛рджрд▓ рдмрдирд╛рдпрд╛ рдЬрд╛рдП рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рдХреА рддрд╕реНрд╡реАрд░ рдореЗрдВ рд╣реИред

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

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

рддреНрд░рд┐рдХреЛрдг


рдЖрдЗрдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рд░реВрдк рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ - рдПрдХ рддреНрд░рд┐рдХреЛрдгред рдПрдХрддрд╛ рдФрд░ рдХрдИ рдЕрдиреНрдп рдЗрдВрдЬрди рдореЙрдбрд▓ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЛрдХрдкреНрд░рд┐рдп рддрд░реАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ: рдХреЛрдиреЗ, рддреНрд░рд┐рдХреЛрдг рдФрд░ рдорд╛рдирджрдВрдбреЛрдВ рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдмрдирд╛рд╡рдЯ рдХреЗ uv- рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрдирд╛рд╡рдЯ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдореЗрд╖ рд╡рд░реНрдЧ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╕рд░рдгреА рд╣реИред рдХреЛрдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ Mesh.vertices рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рддреАрди рдХреЗ рд╕рдореВрд╣ рдореЗрдВ рдХреЛрдиреЗ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ Mesh.triangles рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ ред рдФрд░ Mesh.normals рдФрд░ Mesh.uv рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд╡реИрдХреНрдЯрд░ рдФрд░ рдпреВрд╡реА рдореИрдкреНрд╕ рдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЛ рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдиреЗ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рдд, рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рдХреНрд░рдо рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдКрдВрдЧрд╛ред

рдЖрдЗрдП рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЗрдирдкреБрдЯ рдкрд░ рдПрдХ рддреНрд░рд┐рдХреЛрдг рдХреЗ рддреАрди рдХреЛрдиреЗ рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рддреИрдпрд╛рд░ рдореЙрдбрд▓ рджреЗрддрд╛ рд╣реИред рдЖрдЗрдП рдмреБрдирд┐рдпрд╛рджреА рдмрд╛рддреЛрдВ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред

public static Mesh Triangle(Vector3 vertex0, Vector3 vertex1, Vector3 vertex2) { var mesh = new Mesh(); mesh.vertices = new [] {vertex0, vertex1, vertex2}; mesh.triangles = new [] {0, 1, 2}; return mesh; } 

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

 var normal = Vector3.Cross((vertex1 - vertex0), (vertex2 - vertex0)).normalized; 

рдкрд╣рд▓реЗ, рджреЛ рд╡реИрдХреНрдЯрд░ рддреАрди рдмрд┐рдВрджреБрдУрдВ рд╕реЗ рдмрдиреЗ рдереЗ, рдФрд░ рдлрд┐рд░ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рддреНрд░рд┐рдХреЛрдг рдХреЗ рд╕рднреА рдХреЛрдиреЗ рдкрд░ рд╕рдорд╛рди рд╣реЛрдЧрд╛ред

 mesh.normals = new [] {normal, normal, normal}; 

рдпрд╣ uv- рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдиреА рд╣реБрдИ рд╣реИ, рддреАрди рдХреЛрдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рд░рд▓ рд╣реИред

 mesh.uv = new [] {new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1)}; 

рдареАрдХ рд╣реИ, рдпрд╣ рддреНрд░рд┐рдХреЛрдг рддреИрдпрд╛рд░ рд╣реИред рдЕрдм рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рддреНрд░рд┐рдХреЛрдг
 public static Mesh Triangle(Vector3 vertex0, Vector3 vertex1, Vector3 vertex2) { var normal = Vector3.Cross((vertex1 - vertex0), (vertex2 - vertex0)).normalized; var mesh = new Mesh { vertices = new [] {vertex0, vertex1, vertex2}, normals = new [] {normal, normal, normal}, uv = new [] {new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1)}, triangles = new [] {0, 1, 2} }; return mesh; } 


рдЪрддреБрд╖реНрдХреЛрд╖


рддреНрд░рд┐рдХреЛрдг рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореЙрдбрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд▓реЛрдХрдкреНрд░рд┐рдп рдЖрджрд┐рдо рд╣реИ - рдЕрдЧрд░ рдЖрдкрдХреЛ рдпрд╣ рдкрд╕рдВрдж рд╣реИ рддреЛ рдПрдХ рдЪрддреБрд░реНрднреБрдЬ, рдХреБрдЖрдВ рдпрд╛ рдПрдХ рдЯреНрд░реИрдХреНрдЯрд░ред

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

рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рдХреЛрдиреЗ рдЕрднреА рднреА рджрдХреНрд╖рд┐рдгрд╛рд╡рд░реНрдд рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред

рдЪрддреБрд╖реНрдХреЛрд╖
 public static Mesh Quad(Vector3 origin, Vector3 width, Vector3 length) { var normal = Vector3.Cross(length, width).normalized; var mesh = new Mesh { vertices = new[] { origin, origin + length, origin + length + width, origin + width }, normals = new[] { normal, normal, normal, normal }, uv = new[] { new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1), new Vector2(1, 0) }, triangles = new[] { 0, 1, 2, 0, 2, 3} }; return mesh; } 


рдЕрдм рдЬрдмрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдмреБрдирд┐рдпрд╛рджреА рдЖрджрд┐рдо рд╣реИрдВ, рд╣рдо рдХрд┐рд╕реА рднреА рдореЙрдбрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╡рд┐рдорд╛рди


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

рдЖрд▓рд╕реНрдп рдкреНрд░рдЧрддрд┐ рдХрд╛ рдЗрдВрдЬрди рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдореЙрдбрд▓ рдореЗрдВ рд╡рд░реНрдЧреЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Mesh.CombineMeshes рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ CombineInstance рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд▓реЗрддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдореЙрдбрд▓, рдЗрд╕рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрди рдореИрдЯреНрд░рд┐рдХреНрд╕ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рд▓рд┐рдП, рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ; рд╣рдо рдмрд╛рдХреА рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рддреЗ рд╣реИрдВред

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

рд╡рд┐рдорд╛рди
 public static Mesh Plane(Vector3 origin, Vector3 width, Vector3 length, int widthCount, int lengthCount) { var combine = new CombineInstance[widthCount * lengthCount]; var i = 0; for (var x = 0; x < widthCount; x++) { for (var y = 0; y < lengthCount; y++) { combine[i].mesh = Quad(origin + width * x + length * y, width, length); i++; } } var mesh = new Mesh(); mesh.CombineMeshes(combine, true, false); return mesh; } 


рд╕рдорд╛рдирд╛рдВрддрд░ рдЦрд╛рдд


рдПрдХ рд╡рд┐рдорд╛рди рдкрд░ рдЯрд╛рдЗрд▓ рдмрд┐рдЫрд╛рдиреЗ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ, рддреАрд╕рд░реЗ рдЖрдпрд╛рдо рдкрд░ рдЬрд╛рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред

рд╡рд░реНрдЧреЛрдВ рд╕реЗ, рдХреНрдпреВрдмреНрд╕ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд╕реЗ рднреА рдмреЗрд╣рддрд░, рд╣рдорд╛рд░реЗ рдЫрджреНрдо рдХреА рдорджрдж рд╕реЗ рдЖрдк рди рдХреЗрд╡рд▓ рдХреНрдпреВрдмреНрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдмрд▓реНрдХрд┐ рд╕рдорд╛рдирддрд╛рдПрдВ рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдХреЗрд╡рд▓ рд╢рд╛рд╣! рдХрд┐рд╕реА рдХреЛ рдмрддрд╛рдирд╛ рдорддред

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

рд╕рдорд╛рдирд╛рдВрддрд░ рдЦрд╛рдд
 public static Mesh Cube(Vector3 width, Vector3 length, Vector3 height) { var corner0 = -width/2 - length/2 - height/2; var corner1 = width/2 + length/2 + height/2; var combine = new CombineInstance[6]; combine[0].mesh = Quad(corner0, length, width); combine[1].mesh = Quad(corner0, width, height); combine[2].mesh = Quad(corner0, height, length); combine[3].mesh = Quad(corner1, -width, -length); combine[4].mesh = Quad(corner1, -height, -width); combine[5].mesh = Quad(corner1, -length, -height); var mesh = new Mesh(); mesh.CombineMeshes(combine, true, false); return mesh; } 



octahedron


рдСрдХреНрдЯрд╛рд╣реЗрдбреНрд░реЙрди рдПрдХ рдШрди рдХреА рддрд░рд╣ рд╣реИ, рдЗрд╕рдХреЗ рдХреЛрдиреЗ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ, рд╕рдмрд╕реЗ рдмрдбрд╝реА рдХрдард┐рдирд╛рдИ рддреНрд░рд┐рдХреЛрдг рдореЗрдВ рдХреЛрдиреЗ рдХреЗ рдХреНрд░рдо рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реИред рдСрдХреНрдЯрд╛рд╣реЗрдбреНрд░реЛрди рдЧреЛрд▓реЗ рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдХреЗ рддреНрд░рд┐рдЬреНрдпрд╛ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рд╕рднреА рдХреЛрдиреЗ рдкреНрд░рд╛рдердорд┐рдХ рд░реВрдк рд╕реЗ рдмрдирд╛рдП рдЧрдП рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдпрд╣рд╛рдВ рдирд╣реАрдВ рд░реБрдХрддрд╛

octahedron
 public static Mesh Octahedron(float radius) { //  var v0 = new Vector3(0, -radius, 0); //   var v1 = new Vector3(-radius, 0, 0); var v2 = new Vector3(0, 0, -radius); var v3 = new Vector3(+radius, 0, 0); var v4 = new Vector3(0, 0, +radius); //  var v5 = new Vector3(0, radius, 0); var combine = new CombineInstance[8]; combine[0].mesh = Triangle(v0, v1, v2); combine[1].mesh = Triangle(v0, v2, v3); combine[2].mesh = Triangle(v0, v3, v4); combine[3].mesh = Triangle(v0, v4, v1); combine[4].mesh = Triangle(v5, v2, v1); combine[5].mesh = Triangle(v5, v3, v2); combine[6].mesh = Triangle(v5, v4, v3); combine[7].mesh = Triangle(v5, v1, v4); var mesh = new Mesh(); mesh.CombineMeshes(combine, true, false); return mesh; } 


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

рддреНрд░рд┐рдХреЛрдг рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдХреЛрдиреЗ рдХреЗ рд╕рд╛рде рдСрдХреНрдЯрд╛рд╣реЗрдбреНрд░реЛрди
 public static Mesh Octahedron(float radius) { var v = new Vector3[6]; v[0] = new Vector3(0, -radius, 0); v[1] = new Vector3(-radius, 0, 0); v[2] = new Vector3(0, 0, -radius); v[3] = new Vector3(+radius, 0, 0); v[4] = new Vector3(0, 0, +radius); v[5] = new Vector3(0, radius, 0); var mesh = new Mesh { vertices = v, triangles = new[] { 0, 1, 2, 0, 2, 3, 0, 3, 4, 0, 4, 1, 5, 2, 1, 5, 3, 2, 5, 4, 3, 5, 1, 4} }; mesh.RecalculateNormals(); return mesh; } 

рдЕрдВрдд рдореЗрдВ, рдореИрдВрдиреЗ Mesh.RecalculateNormals рд▓рд╛рдЧреВ рдХрд┐рдпрд╛, рдЬреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдорд╛рдирджрдВрдбреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ , рдпрд╣ рдЖрд╕рд╛рди рд╣реИред

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

рдЪрддреБрд░реНрдкрд╛рд╢реНрд╡реАрдп


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

рддрд╛рдЬрд╝рд╛ рд╕реНрдореГрддрд┐? рдЪрд▓рд┐рдП рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред

рд╣рдорд╛рд░реЗ рдЯреЗрдЯреНрд░рд╛рд╣реЗрдбреНрд░реЛрди рдХреЛ рдХрд┐рд╕реА рдПрдХ рдЪреЗрд╣рд░реЗ рдкрд░ рдЦрдбрд╝реЗ рд╣реЛрдиреЗ рджреЗрдВ, рдлрд┐рд░ рд╡рд┐рдкрд░реАрдд рд╢реАрд░реНрд╖ рдХреЛ рддреБрд░рдВрдд рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 var v = new Vector3[4]; v[0] = new Vector3(0, 1, 0); 

рд╢реЗрд╖ рдХреЛрдиреЗ рдХреЛ рдПрдХ рд╕рдорднреБрдЬ рддреНрд░рд┐рдХреЛрдг рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрдирдХреЗ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╕рд╛рдЗрди рдФрд░ рдХреЛрдЬрд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХрддрд╛ рдореЗрдВ Mathf.Sin рдФрд░ Mathf.Cos рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╣реИрдВ , рдЬреЛ рд░реЗрдбрд┐рдпрди рдореЗрдВ рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред рд╕рд░реНрдХрд▓ рдХреЛ рддреАрди рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЙрд╕ рдкрд░ рддреАрди рдмрд┐рдВрджреБ рдЦреЛрдЬреЗрдВ:

 var segmentAngle = Mathf.PI * 2 / 3; var currentAngle = 0f; for (var i = 1; i <= 3; i++) { v[i] = new Vector3(Mathf.Sin(currentAngle), 0, Mathf.Cos(currentAngle)); currentAngle += segmentAngle; } 

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

 var tetrahedralAngle = Mathf.PI * 119.4712f / 180; 

рдФрд░ рдкрд╛рд╢ рдореЗрдВ:

 v[i] = new Vector3(Mathf.Sin(currentAngle) * Mathf.Sin(tetrahedralAngle), Mathf.Cos(tetrahedralAngle), Mathf.Cos(currentAngle) * Mathf.Sin(tetrahedralAngle)); 

рдЗрддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рд╕рдм рдХреБрдЫ рд╕рдордЭрддрд╛ рд╣реИред рд╕реНрдХреЗрд▓рд┐рдВрдЧ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╕рд╛рде рдЕрдВрдд рдореЗрдВ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:

рдЯреЗрдЯреНрд░рд╛рд╣реЗрдбреНрд░реЙрди рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ
 public static Mesh Tetrahedron(float radius) { var tetrahedralAngle = Mathf.PI * 109.4712f / 180; var segmentAngle = Mathf.PI * 2 / 3; var currentAngle = 0f; var v = new Vector3[4]; v[0] = new Vector3(0, radius, 0); for (var i = 1; i <= 3; i++) { v[i] = new Vector3(radius * Mathf.Sin(currentAngle) * Mathf.Sin(tetrahedralAngle), radius * Mathf.Cos(tetrahedralAngle), radius * Mathf.Cos(currentAngle) * Mathf.Sin(tetrahedralAngle)); currentAngle = currentAngle + segmentAngle; } var combine = new CombineInstance[4]; combine[0].mesh = Triangle(v[0], v[1], v[2]); combine[1].mesh = Triangle(v[1], v[3], v[2]); combine[2].mesh = Triangle(v[0], v[2], v[3]); combine[3].mesh = Triangle(v[0], v[3], v[1]); var mesh = new Mesh(); mesh.CombineMeshes(combine, true, false); return mesh; } 


рд▓реЗрдХрд┐рди рдЧрдгрд┐рдд рдХреЗ рдмрд┐рдирд╛ рд╕рдорд╛рди рдЯреЗрдЯреНрд░рд╛рд╣реЗрдбреНрд░реЙрди, рдХрдареЛрд░-рдХреЛрдбрд┐рдд рд╕рд┐рд░реЛрдВ рдХреЗ рд╕рд╛рде, рдЕрдВрддрд░ рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ:

рд╕рд░рд▓ рдЯреЗрдЯреНрд░рд╛рд╣реЗрдбреНрд░реЙрди
 public static Mesh Tetrahedron(float radius) { var v0 = new Vector3(0, radius, 0); var v1 = new Vector3(0, -radius * 0.333f, radius * 0.943f); var v2 = new Vector3(radius * 0.816f, -radius * 0.333f, -radius * 0.471f); var v3 = new Vector3(-radius * 0.816f, -radius * 0.333f, -radius * 0.471f); var combine = new CombineInstance[4]; combine[0].mesh = Triangle(v0, v1, v2); combine[1].mesh = Triangle(v1, v3, v2); combine[2].mesh = Triangle(v0, v2, v3); combine[3].mesh = Triangle(v0, v3, v1); var mesh = new Mesh(); mesh.CombineMeshes(combine, true, false); return mesh; } 



рд╡рд┐рдВрд╢рддрд┐рдлрд▓рдХ


рдЕрдВрдд рдореЗрдВ, рд╕рдмрд╕реЗ рд╕реНрд╡рд╛рджрд┐рд╖реНрдЯ icosahedron рд╣реИред рдпрджрд┐ рдЖрдк icosahedron рдХреЛ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕рд╣реА рдХреЛрдг рдкрд░ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЗрд╕рдХреЗ рджреЛ рдХреЛрдиреЗ рдПрдХ-рджреВрд╕рд░реЗ рдХреЗ рдиреАрдЪреЗ рдПрдХ рд╣реА рдзреБрд░реА рдкрд░ рд╕реНрдерд┐рдд рд╣реИрдВ, рдФрд░ рдмрд╛рдХреА рджреЛ рд╡реГрддреНрддреЛрдВ рдкрд░ рд╕реНрдерд┐рдд рд╣реИрдВред

рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрдХрд▓ рдкрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкрд╛рдВрдЪ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЙрдирдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░рд╛рд▓ 72 рдбрд┐рдЧреНрд░реА рд╣реИред рд╕рд░реНрдХрд▓ рдХреЗ рдмреАрдЪ рдСрдлрд╕реЗрдЯ 36 рдбрд┐рдЧреНрд░реА рд╣реИред рдЪреЛрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрд░реЗрдЦрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдХреЗ рдЬрд╛рджреВ рдХреЗ рдХреЛрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: тАЬрдпрджрд┐ рджреЛ рдХреЛрдиреЗ рдЙрддреНрддрд░реА рдФрд░ рджрдХреНрд╖рд┐рдгреА рдзреНрд░реБрд╡реЛрдВ (рдЕрдХреНрд╖рд╛рдВрд╢ ┬░ 90 ┬░) рдкрд░ рд▓рд┐рдП рдЬрд╛рдПрдБ, рддреЛ рдЕрдиреНрдп рджрд╕ рдХреЛрдиреЗ рдЕрдХреНрд╖рд╛рдВрд╢ ct рдЖрд░реНрдХрди (1/2 тЙИ ┬▒ 26.57) рдкрд░ рд╣реИрдВ ┬░ тАЭрд╣реИред рд░реВрд╕реА рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЬрд╛рджреВ рдХрд╛ рдХреЛрдирд╛ рдПрдХ рд╕реЗрдХрдВрдб рдХрд╛ рдЕрднрд┐рдЬрд╛рдд рд╡рд░реНрдЧ рд╣реИ ред

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

рд╡рд┐рдВрд╢рддрд┐рдлрд▓рдХ
 public static Mesh Icosahedron(float radius) { var magicAngle = Mathf.PI * 26.565f/180; var segmentAngle = Mathf.PI * 72 / 180; var currentAngle = 0f; var v = new Vector3[12]; v[0] = new Vector3(0, radius, 0); v[11] = new Vector3(0, -radius, 0); for (var i=1; i<6; i++) { v[i] = new Vector3(radius * Mathf.Sin(currentAngle) * Mathf.Cos(magicAngle), radius * Mathf.Sin(magicAngle), radius * Mathf.Cos(currentAngle) * Mathf.Cos(magicAngle)); currentAngle += segmentAngle; } currentAngle = Mathf.PI*36/180; for (var i=6; i<11; i++) { v[i] = new Vector3(radius * Mathf.Sin(currentAngle) * Mathf.Cos(-magicAngle), radius * Mathf.Sin(-magicAngle), radius * Mathf.Cos(currentAngle) * Mathf.Cos(-magicAngle)); currentAngle += segmentAngle; } var combine = new CombineInstance[20]; combine[0].mesh = Triangle(v[0], v[1], v[2]); combine[1].mesh = Triangle(v[0], v[2], v[3]); combine[2].mesh = Triangle(v[0], v[3], v[4]); combine[3].mesh = Triangle(v[0], v[4], v[5]); combine[4].mesh = Triangle(v[0], v[5], v[1]); combine[5].mesh = Triangle(v[11], v[7], v[6]); combine[6].mesh = Triangle(v[11], v[8], v[7]); combine[7].mesh = Triangle(v[11], v[9], v[8]); combine[8].mesh = Triangle(v[11], v[10], v[9]); combine[9].mesh = Triangle(v[11], v[6], v[10]); combine[10].mesh = Triangle(v[2], v[1], v[6]); combine[11].mesh = Triangle(v[3], v[2], v[7]); combine[12].mesh = Triangle(v[4], v[3], v[8]); combine[13].mesh = Triangle(v[5], v[4], v[9]); combine[14].mesh = Triangle(v[1], v[5], v[10]); combine[15].mesh = Triangle(v[6], v[7], v[2]); combine[16].mesh = Triangle(v[7], v[8], v[3]); combine[17].mesh = Triangle(v[8], v[9], v[4]); combine[18].mesh = Triangle(v[9], v[10], v[5]); combine[19].mesh = Triangle(v[10], v[6], v[1]); var mesh = new Mesh(); mesh.CombineMeshes(combine, true, false); return mesh; } 


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


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

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

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

рд╡рд┐рднрд┐рдиреНрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдФрд░ рдмрд╛рдпрдиреЗрд░рд┐рдЬрд╝ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХрддрд╛ рд╡реЗрдм рдкреНрд▓реЗрдпрд░ | рд╡рд┐рдВрдбреЛрдЬ | рд▓рд┐рдирдХреНрд╕ | рдореИрдХ | рдЧрд┐рдЯрд╣рдм рд╕реНрд░реЛрдд

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


All Articles