import sys, math, time from OpenGL.GLUT import * from OpenGL.GL import * from OpenGL.GLU import * startPos = [0, 0, 0] velocity = [1, 0, 0] startTime = time.time() def draw(): glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) glMatrixMode(GL_PROJECTION) glLoadIdentity() gluOrtho2D(-20, 20, -20, 20) glMatrixMode(GL_MODELVIEW) glLoadIdentity() glColor3f(1,1,1) glBegin(GL_LINES) glVertex3f(0,0,0) glVertex3fv(velocity) glEnd() t = time.time() - startTime pos = [0,0,0] for i in [0,1,2]: pos[i] = startPos[i] + velocity[i] * t glColor3f(1, 0.9, 0) glTranslatef(pos[0], pos[1], pos[2]) glutSolidSphere(1, 6, 6) glutSwapBuffers() def drawShape(): pass def keyboard(key, x, y): if key == chr(27): sys.exit(0) elif key == ' ': launchBall() def launchBall(): global startTime startTime = time.time() def mouseButton(button, state, x, y): velocity[0] = (float(x) / glutGet(GLUT_WINDOW_WIDTH) - 0.5) * 10.0 velocity[1] = -(float(y) / glutGet(GLUT_WINDOW_HEIGHT) - 0.5) * 10.0 def mouseMotion(x, y): velocity[0] = (float(x) / glutGet(GLUT_WINDOW_WIDTH) - 0.5) * 10.0 velocity[1] = -(float(y) / glutGet(GLUT_WINDOW_HEIGHT) - 0.5) * 10.0 glutInit(sys.argv) glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH) glutInitWindowSize(400, 400) glutInitWindowPosition(0,0) glutCreateWindow(sys.argv[0]) glutDisplayFunc(draw) glutKeyboardFunc(keyboard) glutMouseFunc(mouseButton) glutMotionFunc(mouseMotion) glutIdleFunc(glutPostRedisplay) glEnable(GL_DEPTH_TEST) glutMainLoop()