private static async Task Render(IRayTracer rayTracer, RayTraceRenderData renderData, string filePath) { var pixelArray = new PixelArray(renderData.Width, renderData.Height); var renderer = new SceneRenderer(); renderer.Progress += (sender, eventArgs) => Console.Write($"...{eventArgs.PercentComplete}%"); await renderer.RayTraceSceneAsync(rayTracer.GetPixelColor, pixelArray, renderData.MaxParallelism).ConfigureAwait(false); pixelArray.SaveToPng(filePath); Console.WriteLine(); Console.WriteLine($"Saved image to {filePath}"); }
public static async Task Main(string[] args) { AppDomain.CurrentDomain.UnhandledException += GlobalExceptionHandler; // todo: get some of these parameters from the command line string inputContentRoot = Path.GetFullPath(@"../../../content"); string outputContentRoot = Path.GetFullPath(@"../../../outputContent"); Directory.CreateDirectory(outputContentRoot); var data = new RayTraceRenderData(640, 640, 5, Environment.ProcessorCount, inputContentRoot); Console.WriteLine(data); Console.WriteLine("rendering..."); string outputFilePath = Path.Combine(outputContentRoot, "csharpray.png"); await Render(RayTracerFactory.CreateSimpleTracer(data), data, outputFilePath).ConfigureAwait(false); }
public static IRayTracer CreateSimpleTracer(RayTraceRenderData renderData) { return(new SimpleRayTracer(renderData.TraceDepth, SceneFactory.MarbleBallsScene(renderData.InputContentRoot), new Rectangle(0, 0, renderData.Width, renderData.Height))); }