-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
69 lines (57 loc) · 1.47 KB
/
main.py
File metadata and controls
69 lines (57 loc) · 1.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import subprocess
import tempfile
from math import pi
from datetime import datetime
from tuples import point, colour, vector
from matrix import Matrix
from canvas import Canvas
from shapes import Sphere, Plane
from ray import ray
from materials import Material
from lights import point_light
from world import World, default_world
from camera import Camera
from patterns import *
from patterns import _TestPattern
import random
from PIL import Image
import numpy as np
def random_colour():
return colour(random.random(), random.random(), random.random())
lights = [
point_light(point(0, 10, -10), colour(1, 1, 1))
]
objects = [
Plane(
material=Material(
reflective=0.6,
pattern=StripePattern()
)
),
Sphere(
transform=Matrix.translate(-1.2, 1, 0),
material=Material(reflective=0.8)
),
Sphere(
transform=Matrix.translate(1.2, 1, 0),
material=Material(
reflective=0.8,
pattern=StripePattern(colour(1, 1, 0), colour(1, 0, 0)))
)
]
world = World(objects=objects, lights=lights)
camera = Camera(
400,
400,
pi/3,
transform=Matrix.view_transform(
point(0, 1, -4), point(0, 1, 0), vector(0, 1, 0)
)
)
time = datetime.now()
canvas = camera.render(world)
print(f'Finished in: {datetime.now() - time}')
ppm = canvas.to_ppm()
with tempfile.NamedTemporaryFile(mode='w+', suffix='.ppm') as fp:
fp.write(ppm)
subprocess.run(['open', '-W', fp.name])