Exemplo n.º 1
0
        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());
        }
Exemplo n.º 3
0
        public void NormalSphere()
        {
            var canvas = Run(new Sphere()
            {
                Material = new Material {
                    Color = new RtColor(1, 0.2, 1)
                }
            });

            PpmOutput.WriteToFile("sphere.ppm", canvas.GetPPMContent());
        }
Exemplo n.º 4
0
        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());
        }
Exemplo n.º 5
0
        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());
        }
Exemplo n.º 6
0
        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;
        }
Exemplo n.º 11
0
        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());
        }
Exemplo n.º 12
0
        //public ChapterNine()
        //{
        //}

        public void Run()
        {
            var canvas = Render();

            PpmOutput.WriteToFile("world.ppm", canvas.GetPPMContent());
        }
Exemplo n.º 13
0
        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>();
            }));
        }