2 (defmacro make-ray
(&key origin direction
)
3 (let ((origin-x (gensym "ORX"))
4 (origin-y (gensym "ORY"))
5 (origin-z (gensym "ORX"))
6 (direction-x (gensym "DIRX"))
7 (direction-y (gensym "DIRY"))
8 (direction-z (gensym "DIRZ")))
9 `(multiple-value-bind (,origin-x
,origin-y
,origin-z
) ,origin
10 (multiple-value-bind (,direction-x
,direction-y
,direction-z
) ,direction
11 (values ,origin-x
,origin-y
,origin-z
,direction-x
,direction-y
,direction-z
)))))
13 (defmacro ray-origin
(&key ray
)
14 `(multiple-value-bind (origin-x origin-y origin-z
) ,ray
15 (values origin-x origin-y origin-z
)))
17 (defmacro ray-direction
(&key ray
)
18 `(multiple-value-bind (origin-x origin-y origin-z direction-x direction-y direction-z
)
20 (declare (ignore origin-x origin-y origin-z
))
21 (values direction-x direction-y direction-z
)))