private void TriangulateCornerTerraces(Vector3 begin, HexCell beginCell, Vector3 left, HexCell leftCell, Vector3 right, HexCell rightCell) { var v3 = HexMetrics.TerraceLerp(begin, left, 1); var v4 = HexMetrics.TerraceLerp(begin, right, 1); var c3 = HexMetrics.TerraceLerp(beginCell.Color, leftCell.Color, 1); var c4 = HexMetrics.TerraceLerp(beginCell.Color, rightCell.Color, 1); AddTriangle(begin, v3, v4); AddTriangleColor(beginCell.Color, c3, c4); for (int i = 2; i < HexMetrics.terraceSteps; i++) { var v1 = v3; var v2 = v4; var c1 = c3; var c2 = c4; v3 = HexMetrics.TerraceLerp(begin, left, i); v4 = HexMetrics.TerraceLerp(begin, right, i); c3 = HexMetrics.TerraceLerp(beginCell.Color, leftCell.Color, i); c4 = HexMetrics.TerraceLerp(beginCell.Color, rightCell.Color, i); AddQuad(v1, v2, v3, v4); AddQuadColor(c1, c2, c3, c4); } AddQuad(v3, v4, left, right); AddQuadColor(c3, c4, leftCell.Color, rightCell.Color); }
public static EdgeVertices TerraceLerp( EdgeVertices a, EdgeVertices b, int step) { EdgeVertices result; result.v1 = HexMetrics.TerraceLerp(a.v1, b.v1, step); result.v2 = HexMetrics.TerraceLerp(a.v2, b.v2, step); result.v3 = HexMetrics.TerraceLerp(a.v3, b.v3, step); result.v4 = HexMetrics.TerraceLerp(a.v4, b.v4, step); return(result); }
private void TriangulateEdgeTerraces(EdgeVertices begin, HexCell beginCell, EdgeVertices end, HexCell endCell) { var e2 = EdgeVertices.TerraceLerp(begin, end, 1); var c2 = HexMetrics.TerraceLerp(beginCell.Color, endCell.Color, 1); TriangulateEdgeStrip(begin, beginCell.Color, e2, c2); for (int i = 2; i < HexMetrics.terraceSteps; i++) { var e1 = e2; var c1 = c2; e2 = EdgeVertices.TerraceLerp(begin, end, i); c2 = HexMetrics.TerraceLerp(beginCell.Color, endCell.Color, i); TriangulateEdgeStrip(e1, c1, e2, c2); } TriangulateEdgeStrip(e2, c2, end, endCell.Color); }
private void TriangulateBoundaryTriangle(Vector3 begin, HexCell beginCell, Vector3 left, HexCell leftCell, Vector3 boundary, Color boundaryColor) { var v2 = Perturb(HexMetrics.TerraceLerp(begin, left, 1)); var c2 = HexMetrics.TerraceLerp(beginCell.Color, leftCell.Color, 1); AddTriangleUnperturbed(Perturb(begin), v2, boundary); AddTriangleColor(beginCell.Color, c2, boundaryColor); for (int i = 2; i < HexMetrics.terraceSteps; i++) { var v1 = v2; var c1 = c2; v2 = Perturb(HexMetrics.TerraceLerp(begin, left, i)); c2 = HexMetrics.TerraceLerp(beginCell.Color, leftCell.Color, i); AddTriangleUnperturbed(v1, v2, boundary); AddTriangleColor(c1, c2, boundaryColor); } AddTriangleUnperturbed(v2, Perturb(left), boundary); AddTriangleColor(c2, leftCell.Color, boundaryColor); }