/// <summary> /// Fill z-bufer /// </summary> /// <param name="borderPoints">Border points</param> private void Fill(List <Point> borderPoints) { while (borderPoints.Count > 0) { Point curent = borderPoints[0]; var inlinePoints = borderPoints.FindAll((p) => p.rY == curent.rY); inlinePoints.Sort((p1, p2) => { if (p1.rX < p2.rX) { return(-1); } if (p1.rX > p2.rX) { return(1); } return(0); }); var brezenhem = new BresenhamApproximation(inlinePoints.First(), inlinePoints.Last()); foreach (var p in brezenhem) { var dep = CalculateDepth(p); context.Zbufer.Add(p, dep, color); // --FILL-- //context.DrawPoint(p); } borderPoints.RemoveAll((p) => inlinePoints.Contains(p)); } }
/// <summary> /// Return list rasterization poin of line /// </summary> /// <returns>Point list</returns> public List <Point> Rasterization() { if (!valid) { var brezenhem = new BresenhamApproximation(p1, p2); raster.Clear(); foreach (var p in brezenhem) { raster.Add(p); } valid = true; } return(raster); }