PDA

View Full Version : Picking Problems



jessejames
11-29-2009, 11:17 AM
Hello All,

Getting along pretty well with this OpenGL stuff but have hit a rock wall with picking. I am using the GL_SELECT mode and i have it somewhat working but it's hit-and-miss!(I am using Python and the Togl (Tcl OpenGL widget) for display)

Here is my Pick method which is an event handler for <Control-Button-1> events. Note in Python comments start with a hash `#`


def onPick(self, event):
x, y = event.x, event.y
buff = glSelectBuffer(64)
glRenderMode(GL_SELECT)
glInitNames()
glPushName(-1)
view = glGetIntegerv(GL_VIEWPORT)
glMatrixMode(GL_PROJECTION)
glPushMatrix()
glLoadIdentity()
realy = list(view)[3]-y
print x, realy
gluPickMatrix(x, realy, 1, 1, view)
#gluPerspective(30, 1.0, 0.0001, 1000.0)
glMatrixMode(GL_MODELVIEW)

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
for e in self.entities:
glLoadName(e._pickname)
e._draw()
#self.tk.call(self.togl, 'swapbuffers')
glMatrixMode(GL_PROJECTION)
glPopMatrix()
glMatrixMode(GL_MODELVIEW)

hits = glRenderMode(GL_RENDER)
print 'hits=',hits

This code *actually* works but it's not selecting the correct faces (well not all the time). I commented out the `glRenderMode(GL_SELECT)` line and swapped the buffer so i could "see" the pick box but it's no where to be found? (Yes i did increase the size to 5x5) I think something is wrong with my projection matrix and the gluPickMatrix is getting fowled up because of it.

Q1: Should i be setting the Projection matrix, and if so, should i do it before or after the call to gluPickMatrix?

Thanks for any and all suggestions!

AdrianPi
11-29-2009, 07:10 PM
Q1: Should i be setting the Projection matrix, and if so, should i do it before or after the call to gluPickMatrix?

You have to set your projection after the pick matrix. Directly from my code:


GL.MatrixMode(GL.PROJECTION);
GL.LoadIdentity();
GLU.PickMatrix((double)x, (double)y, 5, 5, viewport);
activeCamera.RenderProjection();
activeCamera.RenderTransform();