import sys, string from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * class OBJFile: def __init__(self, filename): self.vertices = [] self.faces = [] file = open(filename, "r") lines = file.readlines() for line in lines: values = string.split(line) if len(values) < 1: continue if values[0] == 'v': x = string.atof(values[1]) y = string.atof(values[2]) z = string.atof(values[3]) self.vertices.append([x,y,z]) elif values[0] == 'f': face = [] for v in values[1:]: w = string.split(v,'/') face.append(string.atoi(w[0])) self.faces.append(face) def draw(self): for f in self.faces: glBegin(GL_POLYGON) for v in f: glVertex3fv(self.vertices[v-1]) glEnd() viewRotY = 0 viewRotX = 0 cow = OBJFile("cow.obj") def draw(): glClear(GL_COLOR_BUFFER_BIT) glMatrixMode(GL_PROJECTION) glLoadIdentity() glOrtho(-15, 15, -15, 15, -10, 10) glMatrixMode(GL_MODELVIEW) glLoadIdentity() glRotatef(viewRotX, 1.0, 0.0, 0.0) glRotatef(viewRotY, 0.0, 1.0, 0.0) cow.draw() glutSwapBuffers() def keyboard(key, x, y): if key == chr(27): sys.exit(0) def specialkey(key,x,y): global viewRotX, viewRotY if key == GLUT_KEY_LEFT: viewRotY = viewRotY + 3 elif key == GLUT_KEY_RIGHT: viewRotY = viewRotY - 3 elif key == GLUT_KEY_UP: viewRotX = viewRotX + 3 elif key == GLUT_KEY_DOWN: viewRotX = viewRotX - 3 glutPostRedisplay() glutInit([]) glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE) glutInitWindowSize(400,400) glutCreateWindow(sys.argv[0]) glutDisplayFunc(draw) glutKeyboardFunc(keyboard) glutSpecialFunc(specialkey) glutMainLoop()