public static MeshDraft BaselessPyramid(Vector3 baseCenter, Vector3 apex, float radius, int segments, bool inverted = false) { float segmentAngle = Mathf.PI * 2 / segments * (inverted ? -1 : 1); float currentAngle = 0f; var vertices = new Vector3[segments + 1]; vertices[0] = apex; for (var i = 1; i <= segments; i++) { vertices[i] = PTUtils.PointOnCircle3(radius, currentAngle) + baseCenter; currentAngle += segmentAngle; } var draft = new MeshDraft { name = "BaselessPyramid" }; for (var i = 1; i < segments; i++) { draft.Add(Triangle(vertices[0], vertices[i], vertices[i + 1])); } draft.Add(Triangle(vertices[0], vertices[vertices.Length - 1], vertices[1])); return(draft); }
public static MeshDraft Cylinder(float radius, int segments, float heignt) { float segmentAngle = Mathf.PI * 2 / segments; float currentAngle = 0f; var lowerRing = new List <Vector3>(segments); var upperRing = new List <Vector3>(segments); for (var i = 0; i < segments; i++) { var point = PTUtils.PointOnCircle3(radius, currentAngle); lowerRing.Add(point - Vector3.up * heignt / 2); upperRing.Add(point + Vector3.up * heignt / 2); currentAngle -= segmentAngle; } var draft = TriangleFan(lowerRing); draft.Add(Band(lowerRing, upperRing)); upperRing.Reverse(); draft.Add(TriangleFan(upperRing)); draft.name = "Cylinder"; return(draft); }