Example #1
0
        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);
        }
Example #2
0
        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);
        }