2 (in-package :tuple-trace
)
5 (defun new-primitive (scene &key init name reflectivity diffusion colour
)
8 (prim-type &key normal displacement centre radius
)
12 (make-instance 'plane
:name name
14 :displacement displacement
))
15 (:light
(make-instance 'light
:name name
19 (make-instance 'sphere
:name name
23 (setf (reflectivity-of (material-of result
)) reflectivity
))
25 (setf (diffusion-of (material-of result
)) diffusion
))
27 (setf (colour-of (material-of result
)) colour
))
28 (add-primitive scene result
)))
31 (let* ((raytracer (make-instance 'raytracer
))
32 (scene (make-instance 'scene
)))
35 (:plane
:normal
(make-vector3d* 0.0 1.0 0.0) :displacement
4.4)
39 :color
(make-colour* 0.4 0.3 0.3 1.0))
43 :centre
(make-vertex3d* 1.0 -
0.8 3.0 1.0)
47 :colour
(make-colour* 0.7 0.7 0.7))
51 :centre
(make-vertex3d* -
5.5 -
0.5 7.0 1.0)
56 :colour
(make-colour* 0.7 0.7 1.0 1.0))
60 :position
(make-vertex3d* 0.0 5.0 5.0 1.0)
62 :colour
(make-colour* 0.6 0.6 0.6 1.0))
66 :position
(make-vertex3d* 2.0 5.0 1.0 1.0)
68 :colour
(make-colour* 0.7 0.7 0.9 1.0))
69 (setf (scene-of raytracer
) scene
)
70 (let ((result (render raytracer
)))
71 (write-png result
(merge-pathnames #P
"raytraced.png")))))