Пример #1
0
def makeHiQualityScreen(quality, mol):
    # XXX This function does not currently work
    # For some reason when using mainCanvas as a texture everything is really dark
    # although if you look closely enough you can see the antialiased version
    curres = mainCanvas.GetSoftRes()
    mainCanvas.RedirectToMemory()
    # Render into a higher quality buffer,
    # resample into smaller main window
    mainCanvas.SetRes(curres*quality / 100)
    if not mainCanvas.SetAsOutput():
        # something's wrong - do a normal screen
        mainCanvas.RedirectToVideo()
        mainCanvas.SetAsOutput()
        drawFrame(mol)
        return

    HSratio = float(mainCanvas.GetSoftRes()) / mainCanvas.GetHardRes()
    drawFrame(mol)

    mainCanvas.RedirectToVideo()
    mainCanvas.SetAsOutput()
    glew.glActiveTextureARB(glew.GL_TEXTURE1_ARB)
    glDisable(GL_TEXTURE_2D)
    glew.glActiveTextureARB(glew.GL_TEXTURE0_ARB)
    mainCanvas.SetAsTexture()

    glDisable(glew.GL_FRAGMENT_PROGRAM_ARB)
    glDisable(glew.GL_VERTEX_PROGRAM_ARB)

    setProjection(mainCanvas.GetSoftRes())

    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity()

    glEnable(GL_TEXTURE_2D)
    glDisable(GL_DEPTH_TEST)

    glColor3f(1.,1.,1.)

    z=-45.

    glBegin(GL_QUADS)
    glTexCoord2f(0,0); glVertex3f(-1,-1, z)
    glTexCoord2f(HSratio,0); glVertex3f(+1,-1, z)
    glTexCoord2f(HSratio,HSratio); glVertex3f(+1,+1, z)
    glTexCoord2f(0,HSratio); glVertex3f(-1,+1, z)
    glEnd()

    glEnable(glew.GL_FRAGMENT_PROGRAM_ARB)
    glEnable(glew.GL_VERTEX_PROGRAM_ARB)
    glEnable(GL_DEPTH_TEST)
Пример #2
0
def drawFrame(mol):
    cgSettings.MakeShaders()
    if (mol.DoingAO()):
        mol.PrepareAOstep(1, shadowmap)
        while not mol.DecentAO(): mol.PrepareAOstep(1, shadowmap)

    mainCanvas.SetAsOutput()
    if cgSettings.doingAlphaSnapshot:
        glClearColor( cgSettings.P_halo_col, cgSettings.P_halo_col, cgSettings.P_halo_col, 0.0)
    else:
        glClearColor( cgSettings.P_bg_color_R, cgSettings.P_bg_color_G, cgSettings.P_bg_color_B, 0.0)

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)

    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity()

    if cgSettings.P_sem_effect: lightDir = (0,0,1)
    #else: lightDir= getDirFromTrackball(mol) #(0,0.8,0.6)
    else: lightDir= (0.,0.8,0.6)
    #else: lightDir= (1,1,1)

    setLightDir(lightDir)

    gluLookAt(0,0,-40,   0,0,0,   0,1,0)
    #if (MovingLightMode): drawLightDir()
    glColor3f(1,1,1)
    setProjection(mainCanvas.GetSoftRes())

    if cgSettings.P_use_shadowmap():
        shadowmap.computeAsTexture(getGlLightPos() , cgSettings.do_use_doubleshadow(), shadowmapCanvas)
    cgSettings.BindShaders()
    glEnable(GL_TEXTURE_2D)
    glew.glActiveTextureARB(glew.GL_TEXTURE1_ARB)
    shadowmapCanvas.SetAsTexture()
    mol.Draw()

    glDisable(glew.GL_VERTEX_PROGRAM_ARB)
    glDisable(glew.GL_FRAGMENT_PROGRAM_ARB)
    glDisable(GL_BLEND)

    if (cgSettings.UseHalo() > 0):
        shadowmap.prepareDepthTextureForCurrentViewpoint()
        mol.DrawHalos()
    
    # Draw axes
    if draw_axes:
        px, py, pz = mol.pos
        r = mol.r
        orien = mol.orien
        glPushMatrix()
        glScalef(1./r,1./r,1./r)
        glMultMatrixd((glTrackball.quat * orien).asRotation())
        glTranslatef(-px, -py, -pz)
        glDisable(GL_LIGHTING)
        glBegin(GL_LINES)
        glColor3f(0.,0.,0.)
        glVertex3f(px, py, pz)
        glColor3f(0.,1.,0.)
        glVertex3f(px+r, py, pz)
        glColor3f(0.,0.,0.)
        glVertex3f(px, py, pz)
        glColor3f(1.,0.,0.)
        glVertex3f(px, py+r, pz)
        glColor3f(0.,0.,0.)
        glVertex3f(px, py, pz)
        glColor3f(0.,0.,1.)
        glVertex3f(px, py, pz+r)
        glEnd()
        glPopMatrix()