public void Run(Sphere shape) { var rayOrigin = new RtPoint(0, 0, -5); var wallZ = 10; var color = new RtColor(1.0, 0, 0); var wallSize = 7.0; var canvasSize = 800; var canvas = new Canvas(canvasSize, canvasSize); var pixelSize = wallSize / canvasSize; var half = wallSize / 2; Parallel.For(0, canvasSize, y => { for (int x = 0; x < canvasSize; x++) { var worldY = half - pixelSize * y; var worldX = -half + pixelSize * x; var position = new RtPoint(worldX, worldY, wallZ); var ray = new Ray(rayOrigin, (position - rayOrigin).Normalize()); if (shape.Intersect(ray).Count > 0) { canvas[x, y] = color; } } }); PpmOutput.WriteToFile("sphere.ppm", canvas.GetPPMContent()); }
public void RunChapterNine() { var tuning = new ChapterNine(null); var canvas = tuning.Render(); PpmOutput.WriteToFile($"world1.ppm", canvas.GetPPMContent()); //var animation = new Animation() //{ // FrameCount = 300, // StartFrame = 1 //}; //var tuning = new ChapterNine(animation); //for (int x = animation.StartFrame; x < animation.FrameCount + 1; x++) //{ // animation.CurrentFrame = x; // var canvas = tuning.Render(); // PpmOutput.WriteToFile($"world{x}.ppm", canvas.GetPPMContent(), false); //} //var canvas = tuning.Reference(-Math.PI / 2); //PpmOutput.WriteToFile($"world1.ppm", canvas.GetPPMContent()); }
public void NormalSphere() { var canvas = Run(new Sphere() { Material = new Material { Color = new RtColor(1, 0.2, 1) } }); PpmOutput.WriteToFile("sphere.ppm", canvas.GetPPMContent()); }
public void Run() { var startingPoint = new RtPoint(0, 0, 1); WriteToCanvas(startingPoint.X, startingPoint.Z); for (int i = 1; i < 12; i++) { WriteNumber(i, startingPoint); } PpmOutput.WriteToFile("file.ppm", _canvas.GetPPMContent()); }
public void Run() { var projectile = new Projectile(new RtPoint(0, 1, 0), new RtVector(1, 1.8, 0).Normalize() * 11.3); var environment = new RtEnvironment(new RtVector(0, -0.1, 0), new RtVector(-0.01, 0, 0)); var canvas = new Canvas(900, 550); while (projectile.Position.Y >= 0) { Draw(canvas, projectile.Position); projectile = Tick(projectile, environment); } PpmOutput.WriteToFile("file.ppm", canvas.GetPPMContent()); }
public void ShrinkAlongXAxis() { var shape = new Sphere() { Transform = new Transform() .Scaling(0.5, 1, 1), Material = new Material { Color = new RtColor(1, 0.2, 1) } }; var canvas = Run(shape); PpmOutput.WriteToFile("sphere.ppm", canvas.GetPPMContent()); }
public void AnimateAreaLight(int start, int end) { var animation = new Animation() { FrameCount = 400, }; start = start == 0 ? 1 : start; end = end == 0 ? animation.FrameCount : end; var tuning = new BonusAreaLight(animation); for (int x = start; x < end + 1; x++) { animation.CurrentFrame = x; var canvas = tuning.Animate(); PpmOutput.WriteToFile($"world{x}.ppm", canvas.GetPPMContent(), false); } }
public void RunChapterTwelve() { var animation = new Animation() { FrameCount = 13, StartFrame = 1 }; var tuning = new ChapterTwelve(animation); for (int x = animation.StartFrame; x < animation.FrameCount + 1; x++) { animation.CurrentFrame = x; var canvas = tuning.Render(); PpmOutput.WriteToFile($"world-twelve{x}.ppm", canvas.GetPPMContent(), true); } //var canvas = tuning.Reference(-Math.PI / 2); //PpmOutput.WriteToFile($"world1.ppm", canvas.GetPPMContent()); }
public void Run() { World world = TriangleWorld(); int width = 800; int height = 400; var camera = new Camera(width, height, Math.PI / 2) { ViewTransform = new ViewTransform( new RtPoint(0, 1.5, -1.5), new RtPoint(0, 1, 0), new RtVector(0, 1, 0)) }; //var canvas = camera.Render(world, 441, 253, 1, 2); var canvas = camera.Render(world, false); PpmOutput.WriteToFile("world.ppm", canvas.GetPPMContent()); return; }
public void Run() { World world = CylinderWorld(); int width = 800; int height = 450; var camera = new Camera(width, height, 0.314) { ViewTransform = new ViewTransform( new RtPoint(8, 5, -13), new RtPoint(0, 0.9, 0), new RtVector(0, 1, 0)) }; var canvas = camera.Render(world, true); // var canvas = camera.Render(world, 317, 58, 2, 1); PpmOutput.WriteToFile("world.ppm", canvas.GetPPMContent()); return; }
public void Custom() { var ambiant = Input.ReadDouble("Enter ambient: "); var diffuse = Input.ReadDouble("Enter diffuse: "); var shininess = Input.ReadDouble("Enter shininess: "); var specular = Input.ReadDouble("Enter specular: "); var shape = new Sphere() { Material = new Material { Color = new RtColor(1, 0.2, 1), Ambient = ambiant, Diffuse = diffuse, Shininess = shininess, Specular = specular } }; var canvas = Run(shape); PpmOutput.WriteToFile("sphere.ppm", canvas.GetPPMContent()); }
//public ChapterNine() //{ //} public void Run() { var canvas = Render(); PpmOutput.WriteToFile("world.ppm", canvas.GetPPMContent()); }
public ExercisePage(ConsoleProgram program) : base("Exercises", program) { AddOption(new Option("Chapter One", () => { var chapter = new ChapterOne(); chapter.Run(); Input.ReadString("Press [Enter] to navigate home"); Program.NavigateTo <ExercisePage>(); })); AddOption(new Option("Chapter Two", () => { var chapter = new ChapterTwo(); chapter.Run(); Input.ReadString("Press [Enter] to navigate home"); Program.NavigateTo <ExercisePage>(); })); AddOption(new Option("Chapter Three", () => program.NavigateTo <ChapterThreePage>())); AddOption(new Option("Chapter Four", () => { var chapter = new ChapterFour(); chapter.Run(); Input.ReadString("Press [Enter] to navigate home"); Program.NavigateTo <ExercisePage>(); })); AddOption(new Option("Chapter Five", () => Program.NavigateTo <ChapterFivePage>())); AddOption(new Option("Chapter Six", () => Program.NavigateTo <ChapterSixPage>())); AddOption(new Option("Chapter Seven and Eight", () => { var chapter = new ChapterSeven(); chapter.Run(); Input.ReadString("Press [Enter] to navigate home"); Program.NavigateTo <ExercisePage>(); })); AddOption(new Option("Chapter Nine", () => { var animation = new Animation() { FrameCount = 13, StartFrame = 1 }; var chapter = new ChapterNine(animation); chapter.Run(); Input.ReadString("Press [Enter] to navigate home"); Program.NavigateTo <ExercisePage>(); })); AddOption(new Option("Chapter Thirteen", () => { var chapter = new ChapterThirteen(); chapter.Run(); Input.ReadString("Press [Enter] to navigate home"); Program.NavigateTo <ExercisePage>(); })); AddOption(new Option("Chapter Fourteen", () => { var chapter = new ChapterFourteen(); chapter.Run(); Input.ReadString("Press [Enter] to navigate home"); Program.NavigateTo <ExercisePage>(); })); AddOption(new Option("Chapter Fifteen", () => { var chapter = new ChapterFifteen(); chapter.Run(); Input.ReadString("Press [Enter] to navigate home"); Program.NavigateTo <ExercisePage>(); })); AddOption(new Option("Bonus - Area Light", () => { var bonus = new BonusAreaLight(); var canvas = bonus.Run(); PpmOutput.WriteToFile("world.ppm", canvas.GetPPMContent()); Program.NavigateTo <ExercisePage>(); })); }