#!/usr/bin/newlisp # # spin.c # # Spinning box. This program is in the public domain. # Brian Paul # # Conversion to GLUT by Mark J. Kilgard #------------------------------------------------- # Conversion to newLisp by Peter van Eerten # Adapted for newLisp 10, january 6 2009 - PvE. #------------------------------------------------- (load "GL.lsp" "GLU.lsp" "freeglut.lsp") (set 'Step 5.0) (set 'Scale 1.0) (define (make_object) (set 'lst (GL:glGenLists 1)) (GL:glNewList lst GL:GL_COMPILE) (GL:glBegin GL:GL_LINE_LOOP) (GL:glVertex3f (flt 1.0) (flt 0.5) (flt -0.4)) (GL:glVertex3f (flt 1.0) (flt -0.5) (flt -0.4)) (GL:glVertex3f (flt -1.0) (flt -0.5) (flt -0.4)) (GL:glVertex3f (flt -1.0) (flt 0.5) (flt -0.4)) (GL:glEnd) (GL:glBegin GL:GL_LINE_LOOP) (GL:glVertex3f (flt 1.0) (flt 0.5) (flt 0.4)) (GL:glVertex3f (flt 1.0) (flt -0.5) (flt 0.4)) (GL:glVertex3f (flt -1.0) (flt -0.5) (flt 0.4)) (GL:glVertex3f (flt -1.0) (flt 0.5) (flt 0.4)) (GL:glEnd) (GL:glBegin GL:GL_LINES) (GL:glVertex3f (flt 1.0) (flt 0.5) (flt -0.4)) (GL:glVertex3f (flt 1.0) (flt 0.5) (flt 0.4)) (GL:glVertex3f (flt 1.0) (flt -0.5) (flt -0.4)) (GL:glVertex3f (flt 1.0) (flt -0.5) (flt 0.4)) (GL:glVertex3f (flt -1.0) (flt -0.5) (flt -0.4)) (GL:glVertex3f (flt -1.0) (flt -0.5) (flt 0.4)) (GL:glVertex3f (flt -1.0) (flt 0.5) (flt -0.4)) (GL:glVertex3f (flt -1.0) (flt 0.5) (flt 0.4)) (GL:glEnd) (GL:glEndList) lst ) (define (reshape width height) (GL:glViewport 0 0 width height) (GL:glMatrixMode GL:GL_PROJECTION) (GL:glLoadIdentity) (GL:glFrustum -1.0 1.0 -1.0 1.0 5.0 15.0) (GL:glMatrixMode GL:GL_MODELVIEW) ) # ARGSUSED1 (define (key k x y) (case k (27: (exit)) ) ) (define (draw) (GL:glClear GL:GL_COLOR_BUFFER_BIT) (GL:glPushMatrix) (GL:glTranslatef (flt 0.0) (flt 0.0) (flt -10.0)) (GL:glScalef (flt Scale) (flt Scale) (flt Scale)) (if (!= Xstep 0) (GL:glRotatef (flt Xrot) (flt 1.0) (flt 0.0) (flt 0.0)) (if (!= Ystep 0) (GL:glRotatef (flt Yrot) (flt 0.0) (flt 1.0) (flt 0.0)) (GL:glRotatef (flt Zrot) (flt 0.0) (flt 0.0) (flt 1.0)) ) ) (GL:glCallList Object) (GL:glPopMatrix) (GL:glFlush) (GLUT:glutSwapBuffers) ) (define (idle) (set 'Xrot (add Xrot Xstep)) (set 'Yrot (add Yrot Ystep)) (set 'Zrot (add Zrot Zstep)) (if (>= Xrot 360.0) (begin (set 'Xrot 0.0) (set 'Xstep 0.0) (set 'Ystep Step) ) (if (>= Yrot 360.0) (begin (set 'Yrot 0.0) (set 'Ystep 0.0) (set 'Zstep Step) ) (if (>= Zrot 360.0) (begin (set 'Zrot 0.0) (set 'Zstep 0.0) (set 'Xstep Step) ) ) ) ) (GLUT:glutPostRedisplay) ) (define (visible vis) (if (= vis GLUT:GLUT_VISIBLE) (GLUT:glutIdleFunc 'idle) (GLUT:glutIdleFunc 'NULL) ) ) (define (main argc argv) (GLUT:glutInit (address argc) (address argv)) (GLUT:glutInitDisplayMode (| GLUT:GLUT_DOUBLE GLUT:GLUT_RGB)) (GLUT:glutCreateWindow "Spin") (set 'Object (make_object)) (GL:glCullFace GL:GL_BACK) (GL:glDisable GL:GL_DITHER) (GL:glShadeModel GL:GL_FLAT) (GL:glColor3f (flt 1.0) (flt 1.0) (flt 1.0)) (set 'Xrot 0.0) (set 'Yrot 0.0) (set 'Zrot 0.0) (set 'Xstep Step) (set 'Ystep 0.0) (set 'Zstep 0.0) (GLUT:glutReshapeFunc 'reshape) (GLUT:glutKeyboardFunc 'key) (GLUT:glutVisibilityFunc 'visible) (GLUT:glutDisplayFunc 'draw) (GLUT:glutMainLoop) ) (main 0 0) (exit)