[PyOpenGL-Users] OpenGL Sweep Selection??
Brought to you by:
mcfletch
From: Amy L. <al...@ms...> - 2007-05-21 16:54:04
|
Has anyone implemented OpenGL Sweep Selection?? If so, can you give me any pointers? I'm relatively new to Python, but am already very comfortable with it. I'm very new to OpenGL, and have looked at tutorials, but to no avail, I still don't have sweep selection implemented properly. Selection of one object works beautifully. Here's the code that I implemented to do single object selection: def pick3d( self, event ): # 1. initialization self.recordMouse(event) x = event.pos().x() y = event.pos().y() pixels = 5 buffer_size = 512 viewport = glGetIntegerv(GL_VIEWPORT) # 2. selection logic glSelectBuffer(buffer_size) glRenderMode(GL_SELECT) glInitNames() glMatrixMode(GL_PROJECTION) previousviewmatrix = glGetDoublev(GL_PROJECTION_MATRIX) glLoadIdentity() gluPickMatrix( x, viewport[3]-y, pixels, pixels, viewport ) glMultMatrixd(previousviewmatrix) glMatrixMode(GL_MODELVIEW) self.drawScene( self ) glFlush() glMatrixMode(GL_PROJECTION) glLoadMatrixd(previousviewmatrix) self.buffer = glRenderMode(GL_RENDER) # 3. update graphics self.updateGL() # 4. process selction buffer if control is pressed return self.processBuffer() where processBuffer is: def processBuffer(self): print "--------- pick3d ----------" print " - nhits =", len( self.buffer ) if( len(self.buffer) == 0 ): print "hit nothing" else: min = self.buffer[0][0] for record in self.buffer: minDepth, maxDepth, names = record # add all hit objects to selectedObjects for i in range(len(names)): if(self.selected.count(names[i]) == 1): print " - unselected: ", names[i] self.selected.remove(names[i]) else: self.selected.append(names[i]) print " - selectedObjects: ", self.selected return self.selected The reason processBuffer is defined in this way is b/c I'm only working in 2D right now. I know that to use this for 3D, I'd have to check the depth. Currently, for multiple object selection, I'm requiring the user to do ctrl+leftMouse. As long as ctrl+leftMouse is done, I call pick3d which in turn will add the selectedObject to my list variable. I know this is not the best way to do this, but it works for my purposes. Can someone please tell me how I could 'edit' this to make it work for a sweep selection? Thanks, Amy |