Exemple #1
0
 public Observer(ICamera camera, int imageWidth, int imageHeight)
 {
     Camera                        = camera;
     Accumulator                   = new Accumulator(imageWidth, imageHeight);
     Camera.AspectRatio            = (float)Accumulator.Width / Accumulator.Height;
     Camera.OnMoved               += (_, _) => Accumulator.Clear();
     Camera.Film.SampleRegistered += (_, sample) => Accumulator.Add(sample);
 }
Exemple #2
0
        public void AccumulateAndDraw(Scene scene, Navigation navigation)
        {
            if (navigation.IsViewDirty)
            {
                stopwatch.Stop();
                stopwatch.Reset();
                CumulativeMilliseconds = 0;
                accumulator.Clear();
                iteration = 0;
                stopwatch.Start();
                navigation.IsViewDirty = false;
            }

            if (iteration < MaxIterations)
            {
                accumulator.PreAccumulate();

                for (int i = 0; (i < ViewsPerFrame) && (iteration < MaxIterations); i++)
                {
                    accumulator.PreDraw();

                    DrawSingleFrame(iteration, scene, navigation);

                    accumulator.PostDraw();
                    iteration++;
                }
                accumulator.PostAccumulate();
                CumulativeMilliseconds = stopwatch.ElapsedMilliseconds;
            }
            if (iteration == MaxIterations)
            {
                stopwatch.Stop();
            }

            accumulator.Show();
        }