import sys, math, time from OpenGL.GLUT import * from OpenGL.GL import * from OpenGL.GLU import * start = [-5, 3, -10] end = [4, 0, 0] teapotpos = start[:] active = 0 startTime = 0 A = 0 def update(): global teapotpos, start, end, startTime, active, A if active: # A = (time.time() - startTime) / 3.0 teapotpos[0] = (1.0 - A) * start[0] + A * end[0] teapotpos[1] = (1.0 - A) * start[1] + A * end[1] teapotpos[2] = (1.0 - A) * start[2] + A * end[2] glutPostRedisplay() def drawShape(): glPushMatrix() glTranslate(teapotpos[0], teapotpos[1], teapotpos[2]) glColor3f(1, 0, 0) glutWireTeapot(1) glPopMatrix() glPushMatrix() glTranslate(start[0], start[1], start[2]) glColor3f(0, 0.8, 0) glutWireSphere(0.1, 4, 4) glPopMatrix() glPushMatrix() glTranslate(end[0], end[1], end[2]) glColor3f(0, 0.8, 0) glutWireSphere(0.1, 4, 4) glPopMatrix() cameraDist = 10 cameraXrot = 0 cameraYrot = 0 def draw(): global cameraDist, cameraXrot, cameraYrot glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glMatrixMode(GL_PROJECTION) glLoadIdentity() gluPerspective(60, 1, 0.1, 1000) glMatrixMode(GL_MODELVIEW) glLoadIdentity() glTranslatef(0, 0, -cameraDist) glRotatef(-cameraXrot, 1, 0, 0) glRotatef(-cameraYrot, 0, 1, 0) drawShape() glutSwapBuffers() def keyboard(key, x, y): global cameraDist, active, startTime if key == chr(27): sys.exit(0) elif key == '.': cameraDist = cameraDist - 1 elif key == ',': cameraDist = cameraDist + 1 elif key == ' ': active = not active if active: startTime = time.time() glutPostRedisplay() def specialkey(key,x,y): global cameraXrot, cameraYrot if key == GLUT_KEY_LEFT: cameraYrot = cameraYrot - 3 elif key == GLUT_KEY_RIGHT: cameraYrot = cameraYrot + 3 elif key == GLUT_KEY_UP: cameraXrot = cameraXrot - 3 elif key == GLUT_KEY_DOWN: cameraXrot = cameraXrot + 3 glutPostRedisplay() def mousemotion(x,y): global A A = x * 1.0 / glutGet(GLUT_WINDOW_WIDTH) glutInit(sys.argv) glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH) glutInitWindowSize(400, 400) glutInitWindowPosition(0,0) glutCreateWindow(sys.argv[0]) glutDisplayFunc(draw) glutKeyboardFunc(keyboard) glutSpecialFunc(specialkey) glutIdleFunc(update) glutPassiveMotionFunc(mousemotion) glEnable(GL_DEPTH_TEST) glutMainLoop()