// creation public static EdgeLoop CreateEdgeLoop(ref int baseID, bool isClosed, int segmentCount) { EdgeLoop newLoop = new EdgeLoop() { IsClosed = true, VertCount = segmentCount, VertexBaseID = baseID }; baseID += segmentCount; return(newLoop); }
public static EdgeBridge CreateExtrustion(ref int baseID, EdgeLoop loopA, EdgeLoop loopB) { EdgeBridge bridge = new EdgeBridge() { LoopA = loopA, LoopB = loopB, TriangleBaseID = baseID }; baseID += bridge.GetTriangleIndexCount(); return(bridge); }
// visualization public static void DrawEdgeLoopGizmo(Vector3[] verts, EdgeLoop loop) { for (int i = 0; i < loop.VertCount; i++) { int currentIndex = loop.VertexBaseID + i; int nextIndex = currentIndex + 1; if (loop.IsClosed && i == (loop.VertCount - 1)) { nextIndex = loop.VertexBaseID; } Vector3 currentVert, nextVert; currentVert = verts[currentIndex]; nextVert = verts[nextIndex]; Gizmos.DrawLine(currentVert, nextVert); } }
void GenerateMesh() { int baseID = 0; backLoop = ModelUtils.CreateEdgeLoop(ref baseID, closeLoop, edgeLoopVertCount); frontLoop = ModelUtils.CreateEdgeLoop(ref baseID, closeLoop, edgeLoopVertCount); vertices = new Vector3[backLoop.VertCount + frontLoop.VertCount]; SetVertices(); int triangleBaseID = 0; backFrontBridge = ModelUtils.CreateExtrustion(ref triangleBaseID, frontLoop, backLoop); triangles = new int[backFrontBridge.GetTriangleIndexCount()]; backFrontBridge.TriangulateBridge(ref triangles, false); }