def computeAsTexture(self, L, makeboth, canvas): global lastL #if not numpy.all(lastL == L): # XXX this changes because the light no longer moves with the trackball if True: canvas.SetAsOutput() setMatrices(L, canvas.GetSoftRes(), canvas.GetHardRes(), True, self) glClearDepth(1) glClear(GL_DEPTH_BUFFER_BIT) glDisable(GL_SCISSOR_TEST) glDepthFunc(GL_LESS) self.mol.DrawShadowmap(False, self.shadowSettings) restoreMatrices() if (hardSettings.doubleSM and makeboth): setMatrices(L, canvas.GetSoftRes(), canvas.GetHardRes(), False, self) glClearDepth(-10000) glClear(GL_DEPTH_BUFFER_BIT) glDepthFunc(GL_GREATER) glDisable(GL_SCISSOR_TEST) self.mol.DrawShadowmap(False, self.shadowSettings) restoreMatrices() glClearDepth(1) glDepthFunc(GL_LESS) mainCanvas.SetAsOutput() lastL = L glew.glActiveTextureARB(glew.GL_TEXTURE1_ARB) canvas.SetAsTexture()
def DrawShadowmap(self,invert,shadowSettings): r = self.r * self.scaleFactor px, py, pz = self.pos glPushMatrix() glScalef(1./r,1./r, 1./r) glMultMatrixd((glTrackball.quat * self.orien).asRotation()) glTranslate(-px, -py, -pz) #glClipPlane(GL_CLIP_PLANE0, self.clipplane) scalef=extractCurrentScaleFactor() glew.glProgramEnvParameter4fARB(glew.GL_VERTEX_PROGRAM_ARB, 0, scalef,0,0,0) glEnable(glew.GL_VERTEX_PROGRAM_ARB) glEnable(glew.GL_FRAGMENT_PROGRAM_ARB) glew.glActiveTextureARB(glew.GL_TEXTURE0_ARB) glDisable(GL_TEXTURE_2D) glew.glActiveTextureARB(glew.GL_TEXTURE1_ARB) glDisable(GL_TEXTURE_2D) shadowSettings.BindShaders() glBegin(GL_QUADS) molGL.MolDrawShadow(self.atompos, self.radii, self.clipplane, self.excl, self.idx) glEnd() #glDisableClientState(GL_COLOR_ARRAY) #glDisableClientState(GL_TEXTURE_COORD_ARRAY) #glDrawArrays(GL_QUADS, 0, self.numatoms) #glEnableClientState(GL_COLOR_ARRAY) #glEnableClientState(GL_TEXTURE_COORD_ARRAY) #if (sticks): # pass glPopMatrix()
def DrawOnTexture(self): glEnable(GL_BLEND) glBlendFunc(GL_ONE,GL_ONE) glMatrixMode(GL_PROJECTION) glPushMatrix() glLoadIdentity() glOrtho(0,moltextureCanvas.GetSoftRes(),0,moltextureCanvas.GetSoftRes(), 0,1) glMatrixMode(GL_MODELVIEW) glPushMatrix() glLoadIdentity() lastviewport = glGetIntegerv(GL_VIEWPORT) glViewport(0,0,moltextureCanvas.GetSoftRes(),moltextureCanvas.GetSoftRes()) glew.glActiveTextureARB(glew.GL_TEXTURE1_ARB) glDisable(GL_TEXTURE_2D) glew.glActiveTextureARB(glew.GL_TEXTURE0_ARB) glDisable(GL_TEXTURE_2D) glBegin(GL_QUADS) molGL.MolDrawOnTexture(self.atompos, self.radii, self.textures, hardSettings.CSIZE, self.idx) glEnd() #if (self.sticks): # pass glMatrixMode(GL_PROJECTION) glPopMatrix() glMatrixMode(GL_MODELVIEW) glPopMatrix() glViewport(lastviewport[0],lastviewport[1],lastviewport[2],lastviewport[3]) return lastviewport
def prepareDepthTextureForCurrentViewpoint(self): haloCanvas.SetSameRes(mainCanvas) haloCanvas.SetAsOutput() if (use_accurate_halo): self.shadowSettingsAcc.BindShaders() else: self.shadowSettings.BindShaders() glClear(GL_DEPTH_BUFFER_BIT) self.mol.Draw() mainCanvas.SetAsOutput() glew.glActiveTextureARB(glew.GL_TEXTURE1_ARB) haloCanvas.SetAsTexture() glEnable(GL_TEXTURE_2D)
def Draw(self): r = self.r * self.scaleFactor px, py, pz = self.pos glPushMatrix() glScalef(1./r,1./r,1./r) glMultMatrixd((glTrackball.quat * self.orien).asRotation()) glTranslatef(-px, -py, -pz) #glClipPlane(GL_CLIP_PLANE0, self.clipplane) x = glGetFloatv(GL_MODELVIEW_MATRIX) scalef = extractCurrentScaleFactor_x(x) glew.glProgramEnvParameter4fARB(glew.GL_VERTEX_PROGRAM_ARB,0,scalef,0,0,0) glEnable(glew.GL_VERTEX_PROGRAM_ARB) glEnable(glew.GL_TEXTURE_2D) glew.glActiveTextureARB(glew.GL_TEXTURE0_ARB) moltextureCanvas.SetAsTexture() if cgSettings.P_shadowstrenght>0: ShadowMap.GetCurrentPVMatrix() ShadowMap.FeedParameters() for i in range(3): glew.glProgramEnvParameter4fARB(glew.GL_FRAGMENT_PROGRAM_ARB, i, x[i][0],x[i][1],x[i][2],0) glew.glProgramEnvParameter4fARB(glew.GL_FRAGMENT_PROGRAM_ARB, 6, self.PredictAO(),0,0,0) glEnable(glew.GL_VERTEX_PROGRAM_ARB) glEnable(glew.GL_FRAGMENT_PROGRAM_ARB) glBegin(GL_QUADS) molGL.MolDraw(self.atompos, self.radii, self.textures/moltextureCanvas.GetHardRes(), self.colors, self.clipplane, self.excl, self.idx) glEnd() #glDrawArrays(GL_QUADS, 0, self.numatoms) glDisable(glew.GL_VERTEX_PROGRAM_ARB) glDisable(glew.GL_FRAGMENT_PROGRAM_ARB) # Draw wireframe for clipplane if not numpy.allclose(self.clipplane, 0): clipplane = self.clipplane glColor(0.5, 0.5, 0.5) glBegin(GL_LINE_STRIP) glVertex3f(px-r, clipplane[3], pz-r) glVertex3f(px-r, clipplane[3], pz+r) glVertex3f(px+r, clipplane[3], pz+r) glVertex3f(px+r, clipplane[3], pz-r) glVertex3f(px-r, clipplane[3], pz-r) glEnd() glPopMatrix()