Example #1
0
        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}");
        }
Example #2
0
        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);
        }
Example #3
0
 public static IRayTracer CreateSimpleTracer(RayTraceRenderData renderData)
 {
     return(new SimpleRayTracer(renderData.TraceDepth, SceneFactory.MarbleBallsScene(renderData.InputContentRoot), new Rectangle(0, 0, renderData.Width, renderData.Height)));
 }