import sys, time, math from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * from dmsgl import * import videoInput videoWidth, videoHeight = 320, 240 videoInput.openVideo("/dev/video", videoWidth, videoHeight) orthoCam = OrthoCamera(-0.5, videoWidth-0.5, -0.5, videoHeight-0.5) camera = PerspCamera() camera.moveBackward(5) light = Light() light.position = [-1, 1, 1, 0] material = Material(diffuse=Color.Magenta) coneXform = SimpleTransform(rotateAngle=-90) def draw(): Color.X11['DeepSkyBlue'].clear() orthoCam.apply() glDepthMask(GL_FALSE) glDisable(GL_DEPTH_TEST) glRasterPos2f(0, videoHeight-1) glPixelZoom(1, -1) glDrawPixels(videoWidth, videoHeight, GL_RGB, GL_UNSIGNED_BYTE, videoInput.grabVideo()) glDepthMask(GL_TRUE) glEnable(GL_DEPTH_TEST) camera.apply() light.apply() material.apply() coneXform.pushApply() glutSolidCone(1.0, 1.5, 16, 4) coneXform.pop() material.disable() glutSwapBuffers() def keyboard(key, x, y): global viewDistance if key == chr(27): sys.exit(0) elif key == '.': camera.moveForward(1) elif key == ',': camera.moveBackward(1) def specialkey(key,x,y): global cameraVelX, cameraVelY if key == GLUT_KEY_LEFT: cameraVelY += 90 elif key == GLUT_KEY_RIGHT: cameraVelY -= 90 elif key == GLUT_KEY_UP: cameraVelX += 90 elif key == GLUT_KEY_DOWN: cameraVelX -= 90 def specialkeyUp(key,x,y): global cameraVelX, cameraVelY if key == GLUT_KEY_LEFT: cameraVelY -= 90 elif key == GLUT_KEY_RIGHT: cameraVelY += 90 elif key == GLUT_KEY_UP: cameraVelX -= 90 elif key == GLUT_KEY_DOWN: cameraVelX += 90 cameraVelX = 0.0 cameraVelY = 0.0 prevTime = time.time() def update(): global viewRotX, viewRotY, cameraVelX, cameraVelY global prevTime t = time.time() dt = t - prevTime prevTime = t camera.pitch(cameraVelX * dt) camera.turn(cameraVelY * dt) coneXform.rotateAngle += dt * 50 glutPostRedisplay() glutInit([]) glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH) glutInitWindowSize(400,400) glutCreateWindow(sys.argv[0]) glutDisplayFunc(draw) glutKeyboardFunc(keyboard) glutSpecialFunc(specialkey) glutSpecialUpFunc(specialkeyUp) glutIgnoreKeyRepeat(1) glutIdleFunc(update) glEnable(GL_DEPTH_TEST) quadric = gluNewQuadric() gluQuadricTexture(quadric, GL_TRUE) glutMainLoop()