Beispiel #1
0
 def __init__(self):
     self.objects = []
     self.initted = False
     self.nearDist = 0.001
     self.farDist = 1000.0
     self.glSetupObjs = []
     self.frameSetupObjs = []
     self.translucentObjects = []
     self.screenObjects = []
     self.fov = 45
     self.camera = Camera()
Beispiel #2
0
 def __init__(self):
     self.objects = []
     self.initted = False
     self.nearDist = 0.001
     self.farDist = 1000.0
     self.glSetupObjs = []
     self.frameSetupObjs = []
     self.translucentObjects=[]
     self.screenObjects=[]
     self.fov=45
     self.camera = Camera()
Beispiel #3
0
class glRenderer3D:
    def __init__(self):
        self.objects = []
        self.initted = False
        self.nearDist = 0.001
        self.farDist = 1000.0
        self.glSetupObjs = []
        self.frameSetupObjs = []
        self.translucentObjects=[]
        self.screenObjects=[]
        self.fov=45
        self.camera = Camera()

    def addRenderObject(self, obj):
        self.objects.append(obj)

    def addDynamicObject(self, obj):
        self.objects.append(obj)

    def addStaticObject(self, obj):
        self.objects.append(obj)

    def removeStaticObject(self, obj):
        self.objects.remove(obj)

    def removeDynamicObject(self, obj):
        self.objects.remove(obj)

    def init(self, width, height):
        self.width = width
        self.height = height
        self.reshape(self.width, self.height)

        # Some of the render objects use glut so initialize it (possibly
        #  only needed for freeglut)
        from OpenGL import GLUT
        GLUT.glutInit([])

        for obj in self.glSetupObjs:
            #print "renderer init draw glSetupObj:", obj.__class__.__name__
            obj.draw()

        for obj in self.objects + self.translucentObjects:
            #print "renderer init obj.glInit:", obj.__class__.__name__
            try:
                obj.glInit()
            except AttributeError:
                pass

        self.initted = True

    def reshape(self, w, h):
        GL.glMatrixMode(GL.GL_PROJECTION)
        GL.glLoadIdentity()
        self.width=w
        self.height=h
        GLU.gluPerspective(self.fov, self.width * 1.0 / self.height, self.nearDist, self.farDist)
        GL.glMatrixMode(GL.GL_MODELVIEW)

    def setCamera(self, cam):
        self.camera = cam

    def addFrameSetupObj(self, obj):
        self.frameSetupObjs.append(obj)

    def addGlSetupObj(self, obj):
        self.glSetupObjs.append(obj)

    def render(self, objects=[]):
        for obj in self.frameSetupObjs:
            #print "renderer draw obj:", obj.__class__.__name__
            obj.draw(self)

        if (None != self.camera):
            #print "renderer draw obj:", obj.__class__.__name__
            self.camera.draw(self)

        for o in self.objects + objects:
            #print "renderer draw obj:", obj.__class__.__name__
            o.draw(self)

        GL.glDepthMask(GL.GL_FALSE)
        glEnable(GL_BLEND)
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
        for o in self.translucentObjects:
            #glMatrixMode(GL_MODELVIEW)
            #glLoadIdentity()
            #self.camera.draw()
            #print "renderer draw obj:", obj.__class__.__name__
            try:
                o.draw(self)
            except:
                traceback.print_exc()
                sys.exit()
        glDisable(GL_BLEND)

        GL.glDepthMask(GL.GL_TRUE)

        self._renderScreenObjects()

        # GL.glFlush()
    draw=render

    def _renderScreenObjects(self):
        GL.glMatrixMode(GL.GL_PROJECTION)
        GL.glPushMatrix()
        GL.glLoadIdentity()
        GLU.gluOrtho2D(0,self.width,0,self.height)
        GL.glMatrixMode(GL.GL_MODELVIEW)
        GL.glPushMatrix()
        GL.glLoadIdentity()
        GL.glPushAttrib(GL_ENABLE_BIT)
        GL.glDisable(GL_LIGHTING);
        GL.glDisable(GL_DEPTH_TEST);

        for o in self.screenObjects:
            o.draw(self) # pass renderer so screen parameters are available

        GL.glPopAttrib() # GL_ENABLE_BIT
        GL.glMatrixMode(GL.GL_MODELVIEW)
        GL.glPopMatrix()
        GL.glMatrixMode(GL.GL_PROJECTION)
        GL.glPopMatrix()
Beispiel #4
0
class glRenderer3D:
    def __init__(self):
        self.objects = []
        self.initted = False
        self.nearDist = 0.001
        self.farDist = 1000.0
        self.glSetupObjs = []
        self.frameSetupObjs = []
        self.translucentObjects = []
        self.screenObjects = []
        self.fov = 45
        self.camera = Camera()

    def addRenderObject(self, obj):
        self.objects.append(obj)

    def addDynamicObject(self, obj):
        self.objects.append(obj)

    def addStaticObject(self, obj):
        self.objects.append(obj)

    def removeStaticObject(self, obj):
        self.objects.remove(obj)

    def removeDynamicObject(self, obj):
        self.objects.remove(obj)

    def init(self, width, height):
        self.width = width
        self.height = height
        self.reshape(self.width, self.height)

        # Some of the render objects use glut so initialize it (possibly
        #  only needed for freeglut)
        from OpenGL import GLUT
        GLUT.glutInit([])

        for obj in self.glSetupObjs:
            #print "renderer init draw glSetupObj:", obj.__class__.__name__
            obj.draw()

        for obj in self.objects + self.translucentObjects:
            #print "renderer init obj.glInit:", obj.__class__.__name__
            try:
                obj.glInit()
            except AttributeError:
                pass

        self.initted = True

    def reshape(self, w, h):
        GL.glMatrixMode(GL.GL_PROJECTION)
        GL.glLoadIdentity()
        self.width = w
        self.height = h
        GLU.gluPerspective(self.fov, self.width * 1.0 / self.height,
                           self.nearDist, self.farDist)
        GL.glMatrixMode(GL.GL_MODELVIEW)

    def setCamera(self, cam):
        self.camera = cam

    def addFrameSetupObj(self, obj):
        self.frameSetupObjs.append(obj)

    def addGlSetupObj(self, obj):
        self.glSetupObjs.append(obj)

    def render(self, objects=[]):
        for obj in self.frameSetupObjs:
            #print "renderer draw obj:", obj.__class__.__name__
            obj.draw(self)

        if (None != self.camera):
            #print "renderer draw obj:", obj.__class__.__name__
            self.camera.draw(self)

        for o in self.objects + objects:
            #print "renderer draw obj:", obj.__class__.__name__
            o.draw(self)

        GL.glDepthMask(GL.GL_FALSE)
        glEnable(GL_BLEND)
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
        for o in self.translucentObjects:
            #glMatrixMode(GL_MODELVIEW)
            #glLoadIdentity()
            #self.camera.draw()
            #print "renderer draw obj:", obj.__class__.__name__
            try:
                o.draw(self)
            except:
                traceback.print_exc()
                sys.exit()
        glDisable(GL_BLEND)

        GL.glDepthMask(GL.GL_TRUE)

        self._renderScreenObjects()

        # GL.glFlush()

    draw = render

    def _renderScreenObjects(self):
        GL.glMatrixMode(GL.GL_PROJECTION)
        GL.glPushMatrix()
        GL.glLoadIdentity()
        GLU.gluOrtho2D(0, self.width, 0, self.height)
        GL.glMatrixMode(GL.GL_MODELVIEW)
        GL.glPushMatrix()
        GL.glLoadIdentity()
        GL.glPushAttrib(GL_ENABLE_BIT)
        GL.glDisable(GL_LIGHTING)
        GL.glDisable(GL_DEPTH_TEST)

        for o in self.screenObjects:
            o.draw(self)  # pass renderer so screen parameters are available

        GL.glPopAttrib()  # GL_ENABLE_BIT
        GL.glMatrixMode(GL.GL_MODELVIEW)
        GL.glPopMatrix()
        GL.glMatrixMode(GL.GL_PROJECTION)
        GL.glPopMatrix()