3 Show
3 color planes
(+x
=red
, +y
=green
, and
+z
=blue
);
4 select the color at their intersection.
7 (asdf:oos
'asdf
:load-op
'#:cl-glfw
)
8 (asdf:oos
'asdf
:load-op
'#:cl-glfw-opengl
)
9 (asdf:oos
'asdf
:load-op
'#:cl-glfw-glu
)
12 (defparameter *red
* 0)
13 (defparameter *green
* 0)
14 (defparameter *blue
* 0)
16 (cffi:defcallback key-callback
:void
((key :int
) (action :int
))
17 (when (eql action glfw
:+press
+)
18 (cond ((eql key
(char-code #\Z
))
19 (if (eql (glfw:get-key glfw
:+key-lshift
+) glfw
:+press
+)
22 ((eql key glfw
:+key-esc
+) (glfw:close-window
))
23 ((eql key glfw
:+key-up
+) (incf *red
*))
24 ((eql key glfw
:+key-down
+) (decf *red
*))
25 ((eql key glfw
:+key-left
+) (decf *green
*))
26 ((eql key glfw
:+key-right
+) (incf *green
*)))))
28 (defun color-selector ()
34 (glfw:do-window
("Color Selector" 640 480)
35 ((glfw:enable glfw
:+sticky-keys
+)
36 (glfw:enable glfw
:+key-repeat
+)
37 (gl:disable gl
:+cull-face
+)
38 (gl:enable gl
:+depth-test
+)
39 (gl:depth-mask gl
:+true
+)
40 (glfw:swap-interval
0)
41 (glfw:set-key-callback
(cffi:callback key-callback
))
42 (setf t0
(glfw:get-time
)
45 (when (eql (glfw:get-key glfw
:+key-esc
+) glfw
:+press
+)
46 (return-from glfw
:do-window
))
48 (setf t1
(glfw:get-time
))
51 (glfw:set-window-title
(format nil
"Color Selector (~,1f FPS)" (/ frames
(- t1 t0
))))
57 (destructuring-bind (width height
) (glfw:get-window-size
)
58 (setf height
(max height
1))
59 (gl:viewport
0 0 width height
)
61 (gl:clear-color
0 0 0 0)
62 (gl:clear
(+ gl
:+color-buffer-bit
+
63 gl
:+depth-buffer-bit
+))
65 (gl:matrix-mode gl
:+projection
+)
67 (glu:perspective
65 (/ width height
) 1 100)
68 (gl:matrix-mode gl
:+modelview
+)
74 (gl:translate-f
0 14 0)
77 (gl:rotate-f
20 1 0 0)
79 (gl:rotate-f -
135 0 0 1)
82 (gl:with-begin gl
:+quads
+
85 (gl:vertex-3f r g b
)))
86 (macrolet ((bound (axis)
87 `(cond ((< ,axis
0) (setf ,axis
0) 0)
88 ((> ,axis
255) (setf ,axis
255) 1)
90 (let ((red (bound *red
*))
91 (green (bound *green
*))
92 (blue (bound *blue
*)))
93 ;; red (green-blue plane)
98 ;; green (blue-red plane)
103 ;; blue (red-green plane)
107 (show 1 0 blue
))))))))))