示例#1
0
 def get_ray_through_pixel(self, col, row):
     w = self.screen_width
     h = self.screen_height
     return Line(vec3(0, 0, 0),
                 vec3(-w / 2 + col * (w / self.hpixels),
                      -h / 2 + row * (h / self.vpixels),
                      -self.distance_to_screen))
示例#2
0
def test():
    epsilon = 0.0000001
    radius = 1.3
    s = Sphere(vec3(0, 0, 0), radius)

    l1 = Line(vec3(-1, 2, 0), vec3(1, 2, 0))
    assert s.intersect(l1) == []

    l2 = Line(vec3(-1, 0, 0), vec3(1, 0, 0))

    expected = sorted([vec3(-radius, 0, 0),
                       vec3(+radius, 0, 0)])

    got = sorted(s.intersect(l2))

    for e, g in zip(expected, got):
        assert (e-g).length() < epsilon

    l3 = Line(vec3(-1, radius, 0), vec3(1, radius, 0))

    got = s.intersect(l3)
    print got
    assert len(got) == 1 and (got[0] - vec3(0, radius, 0)).length() < epsilon
示例#3
0
def test2():
    # Assume we are two screen widths from the center, and we have square
    # pixels.
    hpixels = 200
    vpixels = 100
    distance_to_screen = 2
    screen_width = 1
    screen_height = screen_width * vpixels / hpixels

    scene = [Sphere(center=vec3(0, 0, -5),
                    radius= .5, 
                    color=colors['red'])]
    img = render(scene, View(distance_to_screen,
                             screen_width,
                             screen_height,
                             hpixels,
                             vpixels))
    img.save("out.png")