# # glimage.py # Neil Gershenfeld 2/10/08 # animate sin(r)/r image with GLUT # from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * from numpy import * import sys NGRID = 50 KMIN = 0.0 KMAX = 20.0 k=0.0 dk=0.2 def X(j): return (2.0*(j + 0.5)/NGRID - 1.0) def Y(i): return (2.0*(i + 0.5)/NGRID - 1.0) pts = arange(-1.0,1.0,2.0/NGRID) (x,y) = meshgrid(pts,pts) r = sqrt(x*x + y*y) z = ones(r.shape) def display(): global x,y,z for i in range(NGRID-1): glBegin(GL_QUAD_STRIP) for j in range(NGRID): glColor3f(z[i][j],z[i][j],z[i][j]) glVertex3f(X(j),Y(i),0) glColor3f(z[i+1][j],z[i+1][j],z[i+1][j]) glVertex3f(X(j),Y(i+1),0) glEnd() glFlush() def idle(): global k,dk,x,y,z,r if ((k > KMAX) | (k < KMIN)): dk = -dk k += dk z = sin(k*r)/(k*r) glutSwapBuffers() glutPostRedisplay() def mouse(*args): sys.exit() glutInit(()) glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH) glutInitWindowSize(500, 500) glutCreateWindow("glimage") glutDisplayFunc(display) glutMouseFunc(mouse) glutIdleFunc(idle) glShadeModel(GL_SMOOTH) glMatrixMode(GL_PROJECTION) glLoadIdentity() glOrtho(-1.0,1.0,-1.0,1.0,-1.0,1.0) glutMainLoop()