2 (asdf:oos
'asdf
:load-op
'tuple-trace
)
4 (in-package :tuple-trace
)
7 ;; (defun new-primitive (scene &key init name reflectivity diffusion colour)
10 ;; (prim-type &key normal displacement centre radius)
14 ;; (make-instance 'plane :name name
16 ;; :displacement displacement))
17 ;; (:light (make-instance 'light :name name
21 ;; (make-instance 'sphere :name name
23 ;; :radius radius))))))
25 ;; (setf (reflectivity-of (material-of result)) reflectivity))
27 ;; (setf (diffusion-of (material-of result)) diffusion))
29 ;; (setf (colour-of (material-of result)) colour))
30 ;; (add-primitive scene result)))
33 ;; (let* ((raytracer (make-instance 'raytracer))
34 ;; (scene (make-instance 'scene)))
37 ;; (:plane :normal (make-vector3d* 0.0 1.0 0.0) :displacement 4.4)
41 ;; :color (make-colour* 0.4 0.3 0.3 1.0))
45 ;; :centre (make-vertex3d* 1.0 -0.8 3.0 1.0)
49 ;; :colour (make-colour* 0.7 0.7 0.7))
53 ;; :centre (make-vertex3d* -5.5 -0.5 7.0 1.0)
55 ;; :name "Small Sphere"
58 ;; :colour (make-colour* 0.7 0.7 1.0 1.0))
62 ;; :position (make-vertex3d* 0.0 5.0 5.0 1.0)
64 ;; :colour (make-colour* 0.6 0.6 0.6 1.0))
68 ;; :position (make-vertex3d* 2.0 5.0 1.0 1.0)
70 ;; :colour (make-colour* 0.7 0.7 0.9 1.0))
71 ;; (setf (scene-of raytracer) scene)
72 ;; (let ((result (render raytracer)))
73 ;; (write-png result (merge-pathnames #P"raytraced.png")))))
75 ;; create and plot a solid image
77 ;; test ray - sphere intersection
80 (let ((image (make-image 320 200)))
88 (setf (pixel-of image x y
) (make-colour* 1.0 0.0 1.0 0.0))
89 (setf (pixel-of image x
(+ 50 y
)) (make-colour* 0.0 0.0 1.0 0.0))
90 (setf (pixel-of image x
(+ 100 y
)) (make-colour* 1.0 1.0 1.0 0.0)))))
91 (dump-image image
#P
"/home/johnc/projects/tuple-trace/out.png")))
94 (let ((scene (make-scene (make-sphere "sphere001" 0.0 0.0 10.0 5.0)))
95 (ray (make-ray 0.0 0.0 -
10.0 -
0.7031 0.5156 10.0)))
97 for primitive across
(primitives-of scene
)
98 do
(format t
"Primitive ~A~%" primitive
))
99 (format t
"Ray origin ~A Direction ~A~%" (origin-of ray
) (direction-of ray
))
101 (intersect (aref (primitives-of scene
) 0) ray
)))
102 (format t
"Intersection point ~A "
104 (point-on ray interval
))))))
108 ((camera (make-camera 0.0 0.0 -
10.0))
109 (scene (make-scene (make-sphere "sphere001" 0.0 0.0 10.0 5.0)))
110 (image (make-image 320 200)))
111 (render camera scene image
)))