public static Bitmap Start(Lamp lamp) { int h = 720, w = 1080; Container <Figure> list = new Container <Figure>(); Point obs = new Point(0, 0, -1000); double alf = Math.PI / 4; double bt = Math.PI / 4; double gm = 0; Lamp Lamp = lamp; Bitmap frame = new Bitmap(w, h); Graphics paint = Graphics.FromImage(frame); Pen painter = new Pen(Color.Black); paint.Clear(Color.White); obs.Rotate(alf, bt, gm); Point B = new Point(250, 100, -500); Point C = new Point(-250, 100, -500); Point F = new Point(-250, 100, 500); Point D = new Point(250, 100, 500); Point G = new Point(-250, -200, 500); Point H = new Point(250, -200, 500); Point K = new Point(-250, -200, -500); list.PushBack(new Cube(new Point(0, 0, 0), 200)); list.PushBack(new Cube(new Point(0, -150, 0), 100)); list.PushBack(new Triangle(B, C, F)); list.PushBack(new Triangle(D, F, B)); list.PushBack(new Triangle(C, K, G)); list.PushBack(new Triangle(C, F, G)); list.PushBack(new Triangle(D, F, G)); list.PushBack(new Triangle(D, H, G)); Point curr = new Point(); Point inter = new Point(); Point inter2 = new Point(); double lastdist; for (int i = 0; i < w; i++) { for (int j = 0; j < h; j++) { curr.X = -w / 2 + i; curr.Y = -h / 2 + j; curr.Z = -500; curr.Rotate(alf, bt, gm); lastdist = double.MaxValue; for (int a = 0; a < list.GetSize(); a++) { if (list[a].Intersect(obs, curr, ref inter)) { if (Point.Distance(obs, inter) < lastdist) { int il = illumination(Point.Distance(Lamp, inter)); frame.SetPixel(i, j, Color.FromArgb(il, il, il)); lastdist = Point.Distance(obs, inter); for (int b = 0; b < list.GetSize(); b++) { if (list[b].Intersect(inter, Lamp, ref inter2)) { frame.SetPixel(i, j, Color.Black); } } } } } } } return(frame); }