Here are my codes: it doesn't use threading...! # ------------------------------------------------------------ # test_pyoogl.py # ------------------------------------------------------------
#!/usr/bin/env python from pyoogl import * import unittest class test(unittest.TestCase): def testWindow(self): global Scene print 'Test 1:' print '-------' print 'This test simply verify if a GL window can be created.' print Scene = ooglScene() Scene.run() print 'Test 2:' print '-------' print 'Verify if a Point can ben drawed, and then if the ooglBaseObject inheritance scheme is in order.' print Scene.append(ooglPoint()) if __name__ == '__main__': Scene = None unittest.main() # ------------------------------------------------------------ # pyoogl.py # ------------------------------------------------------------ #!/usr/bin/env python from OpenGL.GL import * from OpenGL.GLU import * from OpenGL.GLUT import * import math import sys import threading #------------------------------------------------------------------------------- class ooglBaseObject(object): def __init__(self): pass #------------------------------------------------------------------------------- class ooglObject(ooglBaseObject, list): """ An ooglObject represent a object in a OpenGL scene. This is based on a Composite Pattern: an ooglObject is a list of ooglObjects, and an ooglObject can ben specialised in ooglPoint, ooglPolygon, ... """ def __init__(self): ooglBaseObject.__init__(self) list.__init__(self) def ooglDraw(self): for obj in self: obj.ooglDraw() #------------------------------------------------------------------------------- class ooglPoint(ooglBaseObject): """ An ooglPoint is the simpliest stuff you can creat into your scene. It inherits directly from ooglObject. """ def __init__(self, **kwargs): ooglBaseObject.__init__(self) if 'x' in kwargs: self.__x = kargs['x'] else: self.__x = 0 if 'y' in kwargs: self.__y = kargs['y'] else: self.__y = 0 if 'z' in kwargs: self.__z = kargs['z'] else: self.__z = 0 def ooglSend(self): glVertex3f(self.__x, self.__y, self.__z) def ooglDraw(self): glBegin(GL_POINTS) self.ooglSend() glEnd() glFlush() #------------------------------------------------------------------------------- class ooglScene(list): """ An ooglScene describe all that is needed to represent a OpenGL scene. Fundamentaly, this is a list of ooglObjects. """ def __init__(self): list.__init__(self) # GLUT variables: self.__argv = sys.argv self.__DisplayMode = GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE self.__WindowPosition = {'x': 200, 'y': 200} self.__WindowSize = {'height': 250, 'width': 250} self.__WindowName = 'Untitled' self.__ClearColor = {'red': 0, 'green': 0, 'blue': 0, 'alpha': 0} # GL variables: self.__PointSize = 2 self.__Enable = GL_DEPTH_TEST # Callback functions: self.__DisplayFunc = self.display self.__KeyboardFunc = self.keyboard # Display variables: self.__Clear = GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT self.__DefaultColor = {'red': 1, 'green': 1, 'blue': 1} def run(self): """ Make the GL, GLUT initialisations & launch the GLUT main loop. """ # GLUT initialisation + window creation: glutInit(self.__argv) glutInitDisplayMode(self.__DisplayMode) glutInitWindowPosition(self.__WindowPosition['x'], self.__WindowPosition['y']) glutInitWindowSize(self.__WindowSize['height'], self.__WindowSize['width']) glutCreateWindow(self.__WindowName) # GL initialisation: glClearColor(self.__ClearColor['red'], self.__ClearColor['green'], self.__ClearColor['blue'], self.__ClearColor['alpha']) glPointSize(self.__PointSize) glEnable(self.__Enable) # setting callback functions: glutDisplayFunc(self.__DisplayFunc) glutKeyboardFunc(self.__KeyboardFunc) # GLUT main loop: glutMainLoop() sys.exit(0) def display(self): """ The default for glutDisplayFunc. """ glClear(self.__Clear) glColor3f(self.__DefaultColor['red'], self.__DefaultColor['green'], self.__DefaultColor['blue']) for obj in self: obj.ooglDraw() glFlush() glutSwapBuffers() def keyboard(self, key, x, y): """ The default for glutKeyboardFunc. """ if key == 'q': sys.exit(1) -- http://mail.python.org/mailman/listinfo/python-list