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); }
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(); }