Пример #1
0
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)
Пример #2
0
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)
Пример #3
0
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)
Пример #4
0
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)
Пример #5
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)
Пример #6
0
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)
Пример #7
0
 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()
Пример #8
0
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)
Пример #9
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))