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)); }
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)); }
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)); }
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)); }