# Example of creating a new custom geometry function - a tree # # Dave Pape # 27 September 2004 import sys from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * viewRotY = 0 viewRotX = 0 def drawTree(): glColor3f(0.5, 0.3, 0) glRotatef(-90, 1, 0, 0) gluCylinder(treeQuadric, 1, 1, 2, 8, 1) glTranslatef(0, 0, 2) glColor3f(0, 1, 0) gluCylinder(treeQuadric, 4, 0, 6, 8, 1) def draw(): 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) drawTree() glutSwapBuffers() def keyboard(key, x, y): if key == chr(27): sys.exit(0) 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) treeQuadric = gluNewQuadric() glutMainLoop()