from OpenGL.GL import * from OpenGL.GLU import * import pygame import Image import sys import time def createAndCompileShader(type,source): shader=glCreateShader(type) glShaderSource(shader,source) glCompileShader(shader) # get "compile status" - glCompileShader will not fail with # an exception in case of syntax errors result=glGetShaderiv(shader,GL_COMPILE_STATUS) if (result!=1): # shader didn't compile raise Exception("Couldn't compile shader\nShader compilation Log:\n"+glGetShaderInfoLog(shader)) return shader class Shader: def __init__(self): print "Error: parameters needed" def __init__(self, vs_source, ps_source): vs_shader = createAndCompileShader(GL_VERTEX_SHADER,vs_source) ps_shader = createAndCompileShader(GL_FRAGMENT_SHADER,ps_source) self.program = glCreateProgram() glAttachShader(self.program,vs_shader) glAttachShader(self.program,ps_shader) glLinkProgram(self.program) self.enable() def enable(self): try: glUseProgram(self.program) except OpenGL.error.GLError: print glGetProgramInfoLog(self.program) raise class Box: def __init__(self,color): self.cubelist = glGenLists(1); glNewList(self.cubelist,GL_COMPILE) glBegin(GL_QUADS) glColor3f(color[0],color[1],color[2]) glNormal3f(0,0,-1) glVertex3f( -1, -1, -1) glVertex3f( 1, -1, -1) glVertex3f( 1, 1, -1) glVertex3f( -1, 1, -1) glNormal3f(0,0,1) glVertex3f( -1, -1, 1) glVertex3f( 1, -1, 1) glVertex3f( 1, 1, 1) glVertex3f( -1, 1, 1) glNormal3f(0,-1,0) glVertex3f( -1, -1, -1) glVertex3f( 1, -1, -1) glVertex3f( 1, -1, 1) glVertex3f( -1, -1, 1) glNormal3f(0,1,0) glVertex3f( -1, 1, -1) glVertex3f( 1, 1, -1) glVertex3f( 1, 1, 1) glVertex3f( -1, 1, 1) glNormal3f(-1,0,0) glVertex3f( -1, -1, -1) glVertex3f( -1, 1, -1) glVertex3f( -1, 1, 1) glVertex3f( -1, -1, 1) glNormal3f(1,0,0) glVertex3f( 1, -1, -1) glVertex3f( 1, 1, -1) glVertex3f( 1, 1, 1) glVertex3f( 1, -1, 1) glEnd() glEndList() def render(self): glCallList(self.cubelist) # ************************************* def jpg_file_write(name, number, data): im = Image.frombuffer("RGBA", (800,600), data, "raw", "RGBA", 0, 0) fnumber = "%05d" % number im.save(name + fnumber + ".jpg")