public static Task TraceScene( Camera camera, World world, DrawPixel drawPixel, int maximumReflections, CancellationToken cancelToken) => Task.Factory.StartNew(() => { try { Parallel.ForEach( Shuffled(GetAllPoints(camera.Dimensions)), new ParallelOptions { CancellationToken = cancelToken, }, (position, loopState) => { var ray = camera.CreateRayForPixel(position.X, position.Y); var color = world.ComputeColor(ray, maximumReflections); drawPixel(position.X, position.Y, color); }); } catch (OperationCanceledException) { // Why does this throw??? What am I supposed to do here other than ignore it??? } });
public GameState(DrawPixel drawPixel, int canvasWidth, int canvasHeight) { _drawPixel = drawPixel; _canvasWidth = canvasWidth; _canvasHeight = canvasHeight; _centerPosition = new Point(canvasWidth / 2, canvasHeight / 2); }
/// <summary> /// Plotar um pixel na tela /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { DrawPixel drawPixel = new DrawPixel(); drawPixel.bitmap = mBitmap; try { drawPixel.Draw(double.Parse(textBox1.Text), double.Parse(textBox2.Text), Color.Blue); } catch (Exception ex) { Console.WriteLine(ex.Message); } UpdateView(); }
public static Task TraceSceneByRows( Camera camera, World world, DrawPixel drawPixel, int maximumReflections, CancellationToken cancelToken, Action reportRowRendered) => Task.Factory.StartNew(() => Parallel.For( 0, camera.Dimensions.Height, new ParallelOptions { CancellationToken = cancelToken }, row => { for (int col = 0; col < camera.Dimensions.Width; col++) { var ray = camera.CreateRayForPixel(col, row); var color = world.ComputeColor(ray, maximumReflections); drawPixel(col, row, color); } reportRowRendered(); }));