Source

Demo source code

Crappy FFI code for reading jpegs:


image.cpp
image.lisp

Tori

(defun test1 ()
  (let* ((camera-1 (camera (point-of-interest)))
	 (scene (scene camera-1
		       (lighting t
				 (group 
				  (light1)
				  (light2-red)
				  (translate 0.0 0.0 15.0 camera-1)
				  (material :diffuse v-med :specular v-med :ambient v-lo :shininess 10.0 :child
					    (group (translate 4.5 0.0 0.0
							      (rotate -30.0 1.0 0.0 0.0  (torus 1d0 3d0 40 50)))
						   (translate -4.5 0.0 0.0
							      (rotate -30.0 1.0 0.0 0.0  (torus 1d0 3d0 40 50)))
						   (rotate 30.0 1.0 0.0 0.0  
							   (torus 1d0 4.5d0 40 50)))))))))
    (animate scene)))

Light - Diffuse, Specular, and Ambient

(defun test1a ()
  (labels ((make-torus () (torus 0.4d0 1.2d0 40 40))
	   (make-line (f)
		      (group-l (mapcar (lambda (l x) 
					 (funcall f l (translate x 0.0 0.0 (rotate -30.0 1.0 0.0 0.0 (make-torus)))))
				       (list v-off v-lo v-med v-hi v-on)
				       '( -7.0 -3.5 0.0 3.5 7.0)))))
    (let* ((camera-1 (camera (point-of-interest) :fov 5.0d0))
	   (scene (scene camera-1
			 (lighting t
				   (group 
				    (translate -100.0 0.0 10.0 (light :specular v-on :ambient v-on :diffuse v-on))
				    (translate 0.0 0.0 150.0 camera-1)
				    (material :specular v-lo :diffuse v-lo :ambient v-lo :child
					      (shade-model GL_SMOOTH
							   (compile-list
							    (group
							     (translate 0.0  0.0 0.0 (make-line #'mat-diffuse))
							     (translate 0.0  4.0 0.0 (make-line #'mat-specular))
							     (translate 0.0 -4.0 0.0 (make-line #'mat-ambient)))))))))))
      (animate scene))))

Rotating Things


(defun rotating-sphere ()
  (let* ((sphere 
	  (rotate 90.0 1.0 0.0 0.0
		  (sphere 1d0 30 30 :normals GLU_SMOOTH :texture GL_TRUE )))
	 (rotator (rotate 0.0 0.0 1.0 0.0 sphere))
	 (spinner (ticker rotator (lambda (node delta-time)
				    (incf (angle node) (* 30.0 delta-time))))))
    (group rotator spinner)))

(defun rotating-cylinder ()
  (let* ((obj (cylinder 1d0 0d0 (* 2 PI) 30 30 :normals GLU_SMOOTH :texture GL_TRUE ))
	 (rotator (rotate 0.0 0.0 0.0 1.0 obj))
	 (spinner (ticker rotator (lambda (node delta-time)
				    (incf (angle node) (* 30.0 delta-time))))))
    (group rotator spinner)))

(defun rotating-disk ()
  (let* ((obj (partial-disk 1d0 3d0 10 10 0d0 270d0 :normals GLU_SMOOTH :texture GL_TRUE ))
	 (rotator (rotate 0.0 1.0 0.0 0.0 obj))
	 (spinner (ticker rotator (lambda (node delta-time)
				    (incf (angle node) (* 30.0 delta-time))))))
    (group rotator spinner)))

(defun test2 ()
  (let* ((poi-1 (point-of-interest))
	 (camera-1 (camera poi-1))
	 (scene (scene camera-1
		       (lighting nil
				 (texture 'girls
					  (group 
					   (translate 0.0 0.0 9.0 camera-1)

					   (translate 2.5 2.5 0.0 (rotating-sphere))
					   (translate 0.0 2.5 0.0 (rotating-sphere))
					   (translate -2.5 2.5 0.0 (rotating-sphere))

					   (translate 2.5 0.0 0.0 (rotating-cylinder))
					   (translate 0.0 0.0 0.0 (rotating-cylinder))
					   (translate -2.5 0.0 0.0 (rotating-cylinder))
					
					   (translate 2.5 -2.5 0.0 (scale .3 .3 .3 (rotating-disk)))
					   (translate 0.0 -2.5 0.0 (scale .4 .4 .4 (rotating-disk)))
					   (translate -2.5 -2.5 0.0 (scale .3 .3 .3 (rotating-disk)))
				       
					   poi-1))))))
    (animate scene)))

Rotations

(defun test3 ()
  (let* ((poi (point-of-interest))
	 (camera-1 (camera poi))
	 (day-rot (rotate 0.0 0.0 1.0 0.0
			  (rotate 90.0 1.0 0.0 0.0
				  (sphere 4d0 30 30 :normals GLU_SMOOTH :texture GL_TRUE ))))
	 (rotator (rotate 0.0 0.0 1.0 0.0
			  (translate 15.0 0.0 0.0
				     day-rot)))
	 (day-spinner (ticker day-rot (lambda (node delta-time)
					(incf (angle node) (* 30.0 delta-time)))))
	 (year-spinner (ticker rotator (lambda (node delta-time)
				    (incf (angle node) (* 15.0 delta-time)))))
	 (scene (scene camera-1
		       (texture 'earth
				(texture-transform 1.0 0.0 -1.0 1.0
						   (group camera-1
							  year-spinner
							  day-spinner
							  (translate 0.0 0.0 -30.0 
								     (group poi rotator))))))))
    (animate scene)))

The Sixth Platonic Solid

(defun test5 ()
  (let* ((camera-1 (camera (point-of-interest) :fov 5.0d0))
	 (scene (scene camera-1
		       (lighting t
				 (shade-model GL_SMOOTH
					      (group 
					       (light1)
					       (light2)
					       (translate 0.0 0.0 200.0 camera-1)
					       (material :ambient v-lo :shininess 100.0 :child
							 (group-l
							  (mapcar (lambda (specular y)
								    (translate 0.0 y 0.0
									       (mat-specular specular
											     (group-l
											      (mapcar (lambda (diffuse x)
													(translate x 0.0 0.0
														   (mat-diffuse diffuse 
																(compile-list
																 (teapot 1d0)))))
												      (list v-off v-lo v-med v-hi v-on)
												      '(-8.0 -4.0 0.0 4.0 8.0))))))
								  (list v-off v-lo v-med v-hi v-on)
								  '(-6.0 -3.0 0.0 3.0 6.0))))))))))
    (animate scene)))