コード例 #1
0
 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???
     }
 });
コード例 #2
0
        public GameState(DrawPixel drawPixel, int canvasWidth, int canvasHeight)
        {
            _drawPixel    = drawPixel;
            _canvasWidth  = canvasWidth;
            _canvasHeight = canvasHeight;

            _centerPosition = new Point(canvasWidth / 2, canvasHeight / 2);
        }
コード例 #3
0
        /// <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();
        }
コード例 #4
0
        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();
        }));