Picking object problem!!!

I need to pick an object on the screen and it seems, it doesn’t work. this is my code

<CODE>
CWindowsGLDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);

	CPaintDC dc(this);

	GLuint selectBuffer[BUFFSIZE];
	GLint hits;
	GLint viewport[4];

	glGetIntegerv(GL_VIEWPORT, viewport);

	glSelectBuffer(BUFFSIZE, selectBuffer);
	glRenderMode(GL_SELECT);

	glInitNames();
	glPushName(0);

	double size = 0.0, s;
	std::vector&lt;Piece *&gt;::iterator it;
	for(it = pDoc-&gt;graphics.begin(); it != pDoc-&gt;graphics.end(); it++) {
	  s = (*it)-&gt;size();
	  if(s &gt; size) size = s;
	}

	glMatrixMode(GL_PROJECTION);
	glPushMatrix();
	glLoadIdentity();
	gluPickMatrix(point.x, viewport[3]-point.y, 1.0, 1.0, viewport);
	gluPerspective(30.0, 1.0, 0.01 * size, 30.0 * size);
	
	glMatrixMode(GL_MODELVIEW);
	glPushMatrix();
	gluLookAt(0.0, 8.0*size, 6.0*size, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
	glRotated(angleYVue,1.0, 0.0, 0.0);
	glRotated(angleXVue,0.0,1.0,0.0);
	
	for(it = pDoc-&gt;graphics.begin(); it != pDoc-&gt;graphics.end(); it++)
	  (*it)-&gt;internalDraw(1);

	glMatrixMode(GL_MODELVIEW);
	glPopMatrix();

	glMatrixMode(GL_PROJECTION);
	glPopMatrix();

	hits = glRenderMode(GL_RENDER);

	int numPiece = Proces****s(hits, selectBuffer);

	for(it = pDoc-&gt;graphics.begin(); it != pDoc-&gt;graphics.end(); it++)
		if( (*it)-&gt;getNumeroGL() == numPiece ){
			pDoc-&gt;pSelected = (*it);	
			pDoc-&gt;pSelected-&gt;setSelected();
		}
		else{
			if((*it)-&gt;isSelected())
				(*it)-&gt;setSelected();
		}

	Invalidate(FALSE);

</CODE>

I’m using glLoadName() and to retrieve the object i’m using

<CODE>

int CWindowsGLView::Proces****s(GLint hits,GLuint buffer[])
{
int i;
int j;
int number;
int name;
GLint z1;
GLint z2;
int zMin = MAX_VALUE;
GLuint *ptr;

ptr = (GLuint *) buffer;

for(i=0;i&lt;hits;i++){ //for each hit
	number = *ptr;
	ptr++;
	z1 = *ptr;//zmin
	ptr++;
	z2 = *ptr;//zmax
	ptr++;

	if(z1&lt;zMin){
		for(j=0;j&lt;number;j++){ //for each name
			zMin = z1;
			name = *ptr;
			ptr++;
		}
	}
} 
return name;

}
</CODE>

Thanks .

Hi!
Aren’t you supposed to do a glLoadName or glPushName somewhere about here:

for(it = pDoc->graphics.begin(); it != pDoc->graphics.end(); it++) {
s = (*it)->size();
if(s > size) size = s;
}

How does the code identify what is picked?
Barry

Hi,

Yes, in fact i’m making a glLoadName in the code that draws the objects. But in fact, my problem is the selection seems to work but when i’m rotating the camera, the selection does’t work in some positions. For example, when i’m in front of the objects, the selection works perfectly but when the camera is at the left so i’m looking from the left the selection doesn’t work anymore. It’s very strange.

Did you have an idea of the problem?

Thans.

Hi,

OK i’ve found the problem. I forgot to clear the buffer.

Thanks. .

What do you mean by “clear the buffer” , because I’m having the same problem in some cases, maybe could be the same problem.

Tnks
Best regards
Kurt