Example #1
0
        public void ShadingOutsideIntersection()
        {
            var w     = World.Default();
            var r     = new Ray(new Point(0, 0, -5), new Vector(0, 0, 1));
            var shape = w.Objects[0];
            var i     = new Intersection(4f, shape);
            var comps = new IntersectionInfo(i, r);
            var c     = PhongShading.HitColor(w, comps);

            c.Should().Be(new Color(0.38066f, 0.47583f, 0.2855f));
        }
Example #2
0
        public void ShadingInsideIntersection()
        {
            var w = World.Default();

            w.SetLights(new PointLight(new Point(0, 0.25f, 0), new Color(1f, 1f, 1f)));
            var r     = new Ray(new Point(0, 0, 0), new Vector(0, 0, 1));
            var shape = w.Objects[1];
            var i     = new Intersection(0.5f, shape);
            var comps = new IntersectionInfo(i, r);
            var c     = PhongShading.HitColor(w, comps);

            c.Should().Be(new Color(0.90482f, 0.90482f, 0.90482f));
        }
Example #3
0
        public void HitColorIncludeReflectedColor()
        {
            var w     = World.Default();
            var shape = new Plane();

            shape.SetMaterial(new Material {
                Reflective = 0.5f
            });
            shape.SetTransform(Transform.Translate(0, -1, 0));
            w.AddObject(shape);
            var r     = new Ray(new Point(0, 0, -3), new Vector(0, -MathF.Sqrt(2f) / 2f, MathF.Sqrt(2f) / 2f));
            var i     = new Intersection(MathF.Sqrt(2f), shape);
            var comps = new IntersectionInfo(i, r);

            PhongShading.HitColor(w, comps).Should().Be(new Color(0.87677f, 0.92436f, 0.82918f));
        }
Example #4
0
        public void HitColorIncludesFresnelEffectOnReflectiveTransparentSurface()
        {
            var w     = World.Default();
            var floor = new Plane {
                Material = { Transparency = 0.5f, Reflective = 0.5f, RefractiveIndex = 1.5f }
            };

            floor.SetTransform(Transform.Translate(0, -1, 0));
            w.AddObject(floor);

            var ball = new Sphere {
                Material = { Texture = new SolidColor(new Color(1, 0, 0)), Ambient = 0.5f }
            };

            ball.SetTransform(Transform.Translate(0, -3.5f, -0.5f));
            w.AddObject(ball);

            var r     = new Ray(new Point(0, 0, -3), new Vector(0, -MathF.Sqrt(2f) / 2f, MathF.Sqrt(2f) / 2f));
            var i     = new Intersection(MathF.Sqrt(2f), floor);
            var xs    = Intersections.Create(i);
            var comps = new IntersectionInfo(xs[0], r, xs);

            PhongShading.HitColor(w, comps, 5).Should().Be(new Color(0.93391f, 0.69643f, 0.69243f));
        }