# Example of all GLU quadric geometry functions # # Dave Pape # 27 September 2004 import sys from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * viewRotY = 0 viewRotX = 0 def draw(): global quadric, viewRotX, viewRotY glClear(GL_COLOR_BUFFER_BIT) glMatrixMode(GL_PROJECTION) glLoadIdentity() glOrtho(-15, 15, -15, 15, -10, 10) glMatrixMode(GL_MODELVIEW) glLoadIdentity() glRotatef(viewRotX, 1.0, 0.0, 0.0) glRotatef(viewRotY, 0.0, 1.0, 0.0) glColor3f(0.0, 1.0, 1.0) glPushMatrix() glTranslatef(-12.0, 0.0, 0.0) gluSphere(quadric, 2.5, 32, 24) glPopMatrix() glColor3f(1.0, 0.0, 1.0) glPushMatrix() glTranslatef(-4.0, 0.0, 0.0) gluCylinder(quadric, 2.5, 3.5, 4.0, 32, 4) glPopMatrix() glColor3f(1.0, 1.0, 0.0) glPushMatrix() glTranslatef(4.0, 0.0, 0.0) gluDisk(quadric, 1.0, 3.5, 32, 4) glPopMatrix() glColor3f(1.0, 1.0, 1.0) glPushMatrix() glTranslatef(12.0, 0.0, 0.0) gluPartialDisk(quadric, 1.0, 3.5, 32, 4, 15.0, 240.0) glPopMatrix() glutSwapBuffers() def keyboard(key, x, y): global quadric if key == chr(27): sys.exit(0) elif key == 'p': gluQuadricDrawStyle(quadric, GLU_POINT) elif key == 'l': gluQuadricDrawStyle(quadric, GLU_LINE) elif key == 's': gluQuadricDrawStyle(quadric, GLU_SILHOUETTE) elif key == 'f': gluQuadricDrawStyle(quadric, GLU_FILL) glutPostRedisplay() def specialkey(key,x,y): global viewRotX, viewRotY if key == GLUT_KEY_LEFT: viewRotY = viewRotY + 3 elif key == GLUT_KEY_RIGHT: viewRotY = viewRotY - 3 elif key == GLUT_KEY_UP: viewRotX = viewRotX + 3 elif key == GLUT_KEY_DOWN: viewRotX = viewRotX - 3 glutPostRedisplay() glutInit([]) glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE) glutInitWindowSize(400,400) glutCreateWindow(sys.argv[0]) glutDisplayFunc(draw) glutKeyboardFunc(keyboard) glutSpecialFunc(specialkey) print """Controls: p - draw with points l - draw with lines s - draw with silhoettes f - draw with filled polygons""" quadric = gluNewQuadric() gluQuadricDrawStyle(quadric, GLU_FILL) glutMainLoop()