def test_lighting_behind_surface(): # eye behind surface s = Sphere() m = Material() p = Point(0, 0, 0) eyev = Vector(0, 0, -1) normalv = Vector(0, 0, -1) light = PointLight(Point(0, 0, 10), Color(1, 1, 1)) res = m.lighting(s, light, p, eyev, normalv) assert res == Color(0.1, 0.1, 0.1)
def test_lighting_eye_in_path(): # eye in reflection path s = Sphere() m = Material() p = Point(0, 0, 0) eyev = Vector(0, -math.sqrt(2) / 2, -math.sqrt(2) / 2) normalv = Vector(0, 0, -1) light = PointLight(Point(0, 10, -10), Color(1, 1, 1)) res = m.lighting(s, light, p, eyev, normalv) assert res == Color(1.6364, 1.6364, 1.6364)
def test_lighting_eye_opposite(): # eye opposite surface, 45 offset s = Sphere() m = Material() p = Point(0, 0, 0) eyev = Vector(0, 0, -1) normalv = Vector(0, 0, -1) light = PointLight(Point(0, 10, -10), Color(1, 1, 1)) res = m.lighting(s, light, p, eyev, normalv) assert res == Color(0.7364, 0.7364, 0.7364)
def test_lighting_eye_offset(): # eye between light and surface, 45 offset s = Sphere() m = Material() p = Point(0, 0, 0) eyev = Vector(0, math.sqrt(2) / 2, -math.sqrt(2) / 2) normalv = Vector(0, 0, -1) light = PointLight(Point(0, 0, -10), Color(1, 1, 1)) res = m.lighting(s, light, p, eyev, normalv) assert res == Color(1.0, 1.0, 1.0)
def test_lighting_eye_between(): # eye between light and surface s = Sphere() m = Material() p = Point(0, 0, 0) eyev = Vector(0, 0, -1) normalv = Vector(0, 0, -1) light = PointLight(Point(0, 0, -10), Color(1, 1, 1)) res = m.lighting(s, light, p, eyev, normalv) assert res == Color(1.9, 1.9, 1.9)
def test_surface_shadow(): s = Sphere() m = Material() p = Point(0, 0, 0) eyev = Vector(0, 0, -1) normalv = Vector(0, 0, -1) light = PointLight(Point(0, 0, -10), Color(1, 1, 1)) in_shadow = True result = m.lighting(s, light, p, eyev, normalv, in_shadow) assert result == Color(0.1, 0.1, 0.1)
def test_lighting_with_pattern_applied(self): m = Material() m.pattern = StripePattern(Color.white(), Color.black()) m.ambient = 1 m.diffuse = 0 m.specular = 0 eyev = Vector(0, 0, -1) normalv = Vector(0, 0, -1) light = PointLight(Point(0, 0, -10), Color.white()) c1 = m.lighting(Sphere(), light, Point(0.9, 0, 0), eyev, normalv, False) c2 = m.lighting(Sphere(), light, Point(1.1, 0, 0), eyev, normalv, False) assert c1 == Color.white() assert c2 == Color.black()
def test_lighting_pattern(): s = Sphere() m = Material() m.pattern = StripePattern(Color(1, 1, 1), Color(0, 0, 0)) m.ambient = 1 m.diffuse = 0 m.specular = 0 eyev = Vector(0, 0, -1) normalv = Vector(0, 0, -1) light = PointLight(Point(0, 0, -10), Color(1, 1, 1)) c1 = m.lighting(s, light, Point(0.9, 0, 0), eyev, normalv, False) c2 = m.lighting(s, light, Point(1.1, 0, 0), eyev, normalv, False) assert c1 == Color(1, 1, 1) assert c2 == Color(0, 0, 0)
class TestMaterials(unittest.TestCase): def setUp(self): self.m = Material() self.pos = Point(0, 0, 0) def test_default_material(self): self.assertEqual(self.m.color, Color(1, 1, 1)) self.assertEqual(self.m.ambient, 0.1) self.assertEqual(self.m.diffuse, 0.9) self.assertEqual(self.m.specular, 0.9) self.assertEqual(self.m.shininess, 200) def test_light_with_eye_between_light_and_surface(self): eyev = Vector(0, 0, -1) normalv = Vector(0, 0, -1) light = PointLight(Point(0, 0, -10), Color(1, 1, 1)) result = self.m.lighting(eyev, normalv, self.pos, light) self.assertEqual(result, Color(1.9, 1.9, 1.9)) def test_light_with_eye_between_light_and_surface_offest_45d(self): eyev = Vector(0, math.sqrt(2) / 2, math.sqrt(2) / 2) normalv = Vector(0, 0, -1) light = PointLight(Point(0, 0, -10), Color(1, 1, 1)) result = self.m.lighting(eyev, normalv, self.pos, light) self.assertEqual(result, Color(1.0, 1.0, 1.0)) def test_light_with_eye_opposite_surface_light_offset_45(self): eyev = Vector(0, 0, -1) normalv = Vector(0, 0, -1) light = PointLight(Point(0, 10, -10), Color(1, 1, 1)) result = self.m.lighting(eyev, normalv, self.pos, light) self.assertEqual(result, Color(0.7364, 0.7364, 0.7364)) def test_light_with_eye_in_reflection_vector(self): eyev = Vector(0, -math.sqrt(2) / 2, -math.sqrt(2) / 2) normalv = Vector(0, 0, -1) light = PointLight(Point(0, 10, -10), Color(1, 1, 1)) result = self.m.lighting(eyev, normalv, self.pos, light) self.assertEqual(result, Color(1.6364, 1.6364, 1.6364)) def test_light_with_light_behind_surface(self): eyev = Vector(0, 0, -1) normalv = Vector(0, 0, -1) light = PointLight(Point(0, 0, 10), Color(1, 1, 1)) result = self.m.lighting(eyev, normalv, self.pos, light) self.assertEqual(result, Color(0.1, 0.1, 0.1)) def test_lighting_with_surface_in_shadow(self): eyev = Vector(0, 0, -1) normalv = Vector(0, 0, -1) light = PointLight(Point(0, 0, -10), Color(1, 1, 1)) inShadow = True result = self.m.lighting(eyev, normalv, self.pos, light, inShadow) self.assertEqual(result, Color(0.1, 0.1, 0.1))