Simple Scene Picking

I’ve seen code (namely: http://jerome.jouvie.free.fr/OpenGl/Tutorials/Tutorial27.php)) that has zillions (ok, 50) lines for picking objects.

The main part seems to be saving the projection matrix, setting the pick matrix to a very small window, and then resetting the projection matrix.

If I have a very simply scene - maybe 10 objects - this all seems unnecessary. I thought I could just pick with the same view that I am displaying on the screen. I tried to do a very much simpler version:



void Pick(GLdouble x, GLdouble y)
{
   GLuint buffer[1024];
   const int bufferSize = sizeof(buffer)/sizeof(GLuint);

   GLint hits;
   
   GLint  min  = -1;
   GLuint minZ = -1;

   glSelectBuffer(bufferSize,buffer); 
   glRenderMode(GL_SELECT);           
   glInitNames();                     
	display();
   hits = glRenderMode(GL_RENDER);    

   /* Determine the nearest hit */

int i=0, j=0;
   if (hits)
   {
      for (i=0, j=0; i<hits; i++)
      {
         if (buffer[j+1]<minZ)
         {
            /* If name stack is empty, return -1                */
            /* If name stack is not empty, return top-most name */

            if (buffer[j]==0)
               min = -1;
            else
               min  = buffer[j+2+buffer[j]];

            minZ = buffer[j+1];
         }

         j += buffer[j] + 3;
      }
   }

cout << "Name: " << min << endl;

}

but it doesn’t work - the picked values are all wrong.

Is there any reason this wouldn’t work?

Dave