public static void create(string name, List <Vector2> verticesList, float height, float width, float zOffset) { int wallpoints = verticesList.Count; float wall = width; //extrude the wall for (int i = wallpoints - 1; i >= 0; i--) { Vector2 extrudePoint; if (i == wallpoints - 1) { Vector2 lot = verticesList[i - 1] - verticesList[i]; lot = new Vector2(-lot.y, lot.x); lot.Normalize(); extrudePoint = verticesList[i] + lot * wall; } else if (i == 0) { Vector2 lot = verticesList[0] - verticesList[1]; lot = new Vector2(-lot.y, lot.x); lot.Normalize(); extrudePoint = verticesList[0] + lot * wall; } else { float angle = Vector2.Angle(verticesList[i] - verticesList[i - 1], verticesList[i] - verticesList[i + 1]); float thickness; if (Mathf.Cos(angle / 2) != 0) { thickness = wall / Mathf.Sin(angle * Mathf.Deg2Rad / 2); } else { thickness = 100; } Vector3 cross = Vector3.Cross(verticesList[i] - verticesList[i - 1], verticesList[i] - verticesList[i + 1]); if (cross.z > 0) { angle = 360 - angle; } Vector2 lot = verticesList[i] - verticesList[i + 1]; lot = Quaternion.AngleAxis(angle / 2, Vector3.forward) * lot; lot.Normalize(); extrudePoint = verticesList[i] + lot * thickness; } verticesList.Add(extrudePoint); } GeometryLoader gl = GameObject.Find("GeometryLoader").GetComponent <GeometryLoader> (); ExtrudeGeometry.create(name, verticesList, height, zOffset, gl.theme.getWallsMaterial(), gl.theme.getWallsMaterialST()); }
void Update() { // star path List <Vector2> pts = new List <Vector2>(); List <Vector2> normals = new List <Vector2>(); for (int i = 0; i < numPts * 2; i++) { int l = i % 2 == 1 ? 10 : 20; float a = (float)i / numPts * Mathf.PI; pts.Add(new Vector2(Mathf.Cos(a) * l, Mathf.Sin(a) * l)); } for (int i = 0; i < pts.Count; i++) { int endI = (i == pts.Count - 1) ? 0 : i + 1; Vector2 vec = pts[endI] - pts[i]; vec.Normalize(); normals.Add(new Vector2(vec.y, -vec.x)); } startShape = new Shape(pts, normals); // random path List <Vector3> randomPoints = new List <Vector3>(); float time = Time.time * speedAmp; for (int i = 0; i < 20; i++) { float t = 2.0f * i + time; randomPoints.Add(new Vector3((i) * 50, 50 * Mathf.Sin(t), 0)); //randomPoints.Add( new Vector3( ( i ) * 50, 0, 0 ) ); } randomSpline = new SplineCurve3(randomPoints); List <Vector3> extrudePts = randomSpline.getSpacedPoints(step); for (int i = 0; i < extrudePts.Count; i++) { Vector3 pt = extrudePts[i]; Debug.DrawRay(pt, Vector3.one * 2.0f, Color.yellow); } // extrudeSettings = new THREE.ExtrudeGeometry.Option(); extrudeSettings.steps = step; extrudeSettings.bevelEnabled = false; extrudeSettings.extrudePath = randomSpline; extrudeSettings.frames = new THREE.TubeGeometry.FrenetFrames(randomSpline, step, false); // THREE.Geometry extrudeGeo = new THREE.ExtrudeGeometry( new List<Shape>(new Shape[]{ startShape }), extrudeSettings ); // if(shapeAndHole == null){ shapeAndHole = ExtrudeGeometry.GetShapeAndHoleObject(startShape, extrudeSettings); // } extrudeGeo.UpdateShape(shapeAndHole, extrudeSettings); UnityEngine.Mesh mesh = extrudeGeo.CreateAndGetMesh(); meshFilter.mesh = mesh; }
public static void create(string name, List <Vector2> verticesList, float height) { Material topMaterial; Material sideMaterial; GeometryLoader gl = GameObject.Find("GeometryLoader").GetComponent <GeometryLoader>(); if (height <= 4.0) { sideMaterial = gl.theme.getBoxMaterial(); topMaterial = gl.theme.getBoxMaterial(); } else { topMaterial = gl.theme.getRoofMaterial(); sideMaterial = gl.theme.getHouseMaterial(); sideMaterial.SetTextureScale("_MainTex", gl.theme.getTextureScaleForHeight((float)height)); } ExtrudeGeometry.create(name, verticesList, height, topMaterial, sideMaterial); }