Пример #1
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)
Пример #2
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)
Пример #3
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)
Пример #4
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)
Пример #5
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)
Пример #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 default(cls):
     world = cls()
     world.light = PointLight(Point(-10, 10, -10), Color(1, 1, 1))
     m = Material()
     m.color = Color(0.8, 1.0, 0.6)
     m.diffuse = 0.7
     m.specular = 0.2
     s1 = Sphere()
     s1.set_material(m)
     s2 = Sphere()
     s2.set_transform(Scaling(0.5, 0.5, 0.5))
     world.objects.extend([s1, s2])
     return world
Пример #8
0
def test_default_world():
    light = PointLight(Point(-10, 10, -10), Color(1, 1, 1))
    s1 = Sphere()
    m = Material()
    m.color = Color(0.8, 1.0, 0.6)
    m.diffuse = 0.7
    m.specular = 0.2
    s1.set_material(m)
    s2 = Sphere()
    t = Scaling(0.5, 0.5, 0.5)
    s2.set_transform(t)
    w = World.default()
    assert w.light == light
    assert s1 in w.objects
    assert s2 in w.objects
Пример #9
0
 def test_default_material(self):
     m = Material()
     assert m.color == Color(1, 1, 1)
     assert m.ambient == 0.1
     assert m.diffuse == 0.9
     assert m.specular == 0.9
     assert m.shininess == 200.0
Пример #10
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()
Пример #11
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)
Пример #12
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))
Пример #13
0
def test_default_material():
    s = _TestShape()
    assert s.material == Material()
from math import pi
from os import sep
from raytracer.camera import Camera
from raytracer.canvas import write_ppm_to_file
from raytracer.lights import PointLight
from raytracer.materials import Material
from raytracer.matrices import scaling, rotation_y, rotation_x, translation, view_transform
from raytracer.scene import World
from raytracer.shapes import Sphere, Plane
from raytracer.tuples import Color, Point, Vector


if __name__ == '__main__':
    floor = Plane()
    floor.material = Material()
    floor.material.color = Color(1, 0.9, 0.9)
    floor.material.specular = 0

    middle = Sphere()
    middle.transformation = translation(-0.5, 1, 0.5)
    middle.material = Material()
    middle.material.color = Color(0.5, 0, 0)
    middle.material.diffuse = 0.7
    middle.material.specular = 0.3
    middle.material.reflective = 1

    right = Sphere()
    right.transformation = translation(1.5, 0.5, -0.5) * scaling(0.5, 0.5, 0.5)
    right.material = Material()
    right.material.color = Color(0.2, 0.2, 0.8)
    right.material.diffuse = 0.7
Пример #15
0
from raytracer.base import *
from raytracer.rays import *
from raytracer.shapes import *
from raytracer.materials import Material
from raytracer.lights import PointLight

WALL_SIZE = 7
CANVAS_SIZE = 100
PIXEL_SIZE = WALL_SIZE / CANVAS_SIZE
HALF = WALL_SIZE / 2

canvas = Canvas(CANVAS_SIZE, CANVAS_SIZE)
s = Sphere()
m = Material(color=Color(1, 0.2, 1))
s.material = m

light_postion = Point(-10, 5, -10)
light_color = Color(1, 1, 1)
light = PointLight(light_postion, light_color)

ray_origin = Point(0, 0, -5)
wall_z = 10

for y in range(0, CANVAS_SIZE):
    world_y = HALF - PIXEL_SIZE * y
    for x in range(0, CANVAS_SIZE):
        world_x = -HALF + PIXEL_SIZE * x
        position = Point(world_x, world_y, wall_z)
        v = position - ray_origin
        r = Ray(ray_origin, v.normalize())
        xs = s.intersects(r)
Пример #16
0
def test_assign_material():
    s = _TestShape()
    m = Material()
    m.ambient = 1
    s.set_material(m)
    assert s.material == m
Пример #17
0
 def test_transparency_and_refractive_index_of_default_material(self):
     m = Material()
     assert m.transparency == 0.0
     assert m.refractive_index == 1.0
Пример #18
0
 def __init__(self):
     self.transform = Identity()
     self.material = Material()
     self.parent = None
Пример #19
0
light = PointLight(Point(50, 100, -50), Color(1, 1, 1))

# - add: light
# at: [ -400, 50, -10 ]
# intensity: [ 0.2, 0.2, 0.2 ]
# # ======================================================
# # define some constants to avoid duplication
# # ======================================================
# - define: white-material
# value:
# color: [ 1, 1, 1 ]
# diffuse: 0.7
# ambient: 0.1
# specular: 0.0
# reflective: 0.1
white = Material()
white.color = Color(1, 1, 1)
white.diffuse = 0.7
white.ambient = 0.1
white.specular = 0.0
white.reflective = 0.1

# - define: blue-material
# extend: white-material
# value:
# color: [ 0.537, 0.831, 0.914 ]
blue = copy.deepcopy(white)
blue.color = Color(0.537, 0.831, 0.914)

# - define: red-material
# extend: white-material
Пример #20
0
 def test_reflectivity_of_default_material(self):
     m = Material()
     assert m.reflective == 0.0
Пример #21
0
from raytracer.rays import Ray
from raytracer.shapes import Sphere
from raytracer.tuples import Point, Color

if __name__ == '__main__':
    ray_origin = Point(0, 0, -5)
    wall_z = 10
    wall_size = 7.0
    canvas_pixels = 100
    pixel_size = wall_size / canvas_pixels
    half = wall_size / 2

    canvas = Canvas(canvas_pixels, canvas_pixels)
    red = Color(1, 0, 0)
    sphere = Sphere()
    m = Material()
    m.color = Color(1, 0.2, 1)
    sphere.material = m

    light = PointLight(Point(-10, 10, -10), Color(1, 1, 1))

    for y in range(canvas_pixels):
        world_y = half - pixel_size * y
        for x in range(canvas_pixels):
            world_x = -half + pixel_size * x

            position = Point(world_x, world_y, wall_z)
            ray = Ray(ray_origin, (position - ray_origin).normalize())
            hit = sphere.intersect(ray).hit()
            if hit:
                point = ray.position(hit.t)
Пример #22
0
 def background(self):
     return {'m': Material(), 'position': Point(0, 0, 0)}
Пример #23
0
def test_reflective_attribute():
    m = Material()
    assert m.reflective == 0.0
Пример #24
0
def test_transparency_and_index():
    m = Material()
    assert m.transparency == 0.0
    assert m.refractive_index == 1.0
Пример #25
0
 def setUp(self):
     self.m = Material()
     self.pos = Point(0, 0, 0)