public Canvas Render(World world) { var image = new Canvas(HSize, VSize); for (var y = 0; y < VSize; y++) { for (var x = 0; x < HSize; x++) { var ray = RayForPixel(x, y); var colour = world.ColourAt(ray); image.SetPixel(x, y, colour); } } return(image); }
public Canvas RenderP(World world) { var image = new Canvas(HSize, VSize); var pixelStorage = new ConcurrentBag <RayPixelResult>(); for (var y = 0; y < VSize; y++) { var xEnum = Enumerable.Range(0, HSize).ToList(); Parallel.ForEach(xEnum, (x) => { var ray = RayForPixel(x, y); var colour = world.ColourAt(ray); pixelStorage.Add(new RayPixelResult(x, y, colour)); }); } foreach (var pixel in pixelStorage) { image.SetPixel(pixel.X, pixel.Y, pixel.C); } return(image); }