void Extend(PointList points, MeshBuilder builder) { Vector3 n = points.ComputeNormal(); PointList pointsB = points.Translate(0.4f * n.normalized); builder.Cap(points.Bridge(pointsB, PointList.BridgeMode.CloseReuse)); DigHole(pointsB, builder); }
void DigHole(PointList points, MeshBuilder builder) { Vector3 n = points.ComputeNormal(); PointList pointsC = points.Scale(0.5f); PointList pointsD = pointsC.Translate(-0.1f * n.normalized); builder.Cap(points.Bridge(pointsC, PointList.BridgeMode.CloseReuse)); builder.Cap(pointsC.Bridge(pointsD, PointList.BridgeMode.CloseReuse)); builder.Cap(pointsD); }
// // // public static Mesh BuildCylinder(Axis axis, float radius, float height, int sides) { MeshBuilder builder = new MeshBuilder(); PointList pointsA = CreatePolygon(axis, radius, sides, -0.5f * height); PointList pointsB = pointsA.Translate(height * Vector(axis)); builder.Cap(pointsA.Reverse()); builder.Cap(pointsA.Bridge(pointsB, PointList.BridgeMode.CloseReuse)); builder.Cap(pointsB); return(builder.Build()); }
private GameObject CreatePentagonUp(float x, float z) { GameObject obj = CreateChild(x, z); MeshBuilder builder = new MeshBuilder(); PointList pointsA = PrimitiveBuilder.CreateUnitPolygon(5); PointList pointsB = pointsA.Translate(new Vector3(0f, 1f, 0f)); builder.Cap(pointsA.Bridge(pointsB, PointList.BridgeMode.CloseReuse)); builder.Cap(pointsB); builder.Cap(pointsA.Reverse()); Mesh mesh = builder.Build(); NodeBuilder.SetMesh(obj, mesh); return(obj); }
// // Axis Aligned Box // public static Mesh BuildBox(float xMin, float xMax, float yMin, float yMax, float zMin, float zMax) { MeshBuilder builder = new MeshBuilder(); PointList pointsA = new PointList(); pointsA.Add(xMin, yMin, zMin); pointsA.Add(xMin, yMin, zMax); pointsA.Add(xMax, yMin, zMax); pointsA.Add(xMax, yMin, zMin); PointList pointsB = pointsA.Translate(new Vector3(0f, yMax - yMin, 0f)); builder.Cap(pointsA.Reverse()); builder.Cap(pointsA.Bridge(pointsB, PointList.BridgeMode.CloseReuse)); builder.Cap(pointsB); return(builder.Build()); }
void Start() { MeshBuilder builder = new MeshBuilder(); PointList pointsZ = PrimitiveBuilder.CreateUnitTile(); PointList pointsA = pointsZ.Translate(new Vector3(0f, -0.5f, 0f)); PointList pointsB = pointsA.Translate(Vector3.up); List <PointList> list = pointsA.Bridge(pointsB, PointList.BridgeMode.CloseReuse); list.Add(pointsA.Reverse()); list.Add(pointsB); foreach (PointList points in list) { SphereSide(points, builder, 5); } Mesh mesh = builder.Build(); NodeBuilder.SetMesh(gameObject, mesh); }
private GameObject CreateUnitTileUp(float x, float z) { GameObject obj = CreateChild(x, z); PointList pointsA = PrimitiveBuilder.CreateUnitTile(); PointList pointsB = pointsA.Translate(Vector3.up); List <PointList> list = pointsA.Bridge(pointsB, PointList.BridgeMode.CloseReuse); MeshBuilder builder = new MeshBuilder(); builder.Cap(list); builder.Cap(pointsB); builder.Cap(pointsA.Reverse()); Mesh mesh = builder.Build(); NodeBuilder.SetMesh(obj, mesh); return(obj); }
void Start() { PointList pointsA = PrimitiveBuilder.CreateUnitTile(); PointList pointsB = pointsA.Translate(0.2f * Vector3.up); List <PointList> list = pointsB.Divide(3, 3); MeshBuilder builder = new MeshBuilder(); builder.Cap(pointsA.Bridge(pointsB, PointList.BridgeMode.CloseReuse)); foreach (PointList points in list) { DigHole(points, builder); } builder.Cap(pointsA.Reverse()); Mesh mesh = builder.Build(); NodeBuilder.SetMesh(gameObject, mesh); }
private GameObject CreatePentagonHop(float x, float z) { GameObject obj = CreateChild(x, z); MeshBuilder builder = new MeshBuilder(); PointList pointsA = PrimitiveBuilder.CreateUnitPolygon(5); PointList pointsB = pointsA.Translate(new Vector3(0f, 1f, 0f)); List <PointList> list = pointsA.Bridge(pointsB, PointList.BridgeMode.CloseReuse); list.Add(pointsB); list.Add(pointsA.Reverse()); foreach (PointList points in list) { Extend(points, builder); } Mesh mesh = builder.Build(); NodeBuilder.SetMesh(obj, mesh); return(obj); }
void Start() { MeshBuilder builder = new MeshBuilder(); // Create a cube PointList pointsA = PrimitiveBuilder.CreateUnitTile(); PointList pointsB = pointsA.Translate(Vector3.up); List <PointList> list = pointsA.Bridge(pointsB, PointList.BridgeMode.CloseReuse); list.Add(pointsA.Reverse()); list.Add(pointsB); // Call Branch() on each face foreach (PointList points in list) { Branch(points, builder, 5); } Mesh mesh = builder.Build(); NodeBuilder.SetMesh(gameObject, mesh); }