grazie grazie per la riposta,
solo che ho porvato un pò con il tuo codice ma ad un certo punto mi sono persa....ricomincio dall'inizio.
ho le segneti strutture
codice:
struct oggetto{
	GLfloat positionX;
	GLfloat positionY;
	GLfloat positionZ;
	GLint tipo;
	GLint colore;
};


struct listObj{
	int counter;
	oggetto objj[];
};

struct listObj listObject;
succesivamente quando disegno i vari oggetti faccio così, assegando in automatico il valore che identificherà quell'oggetto con glLoadName mentre tu mi dici di di fare una glpushname ed una glpopName, domanda:ma sn due cose diverse oppire fanno la stessa cosa?

codice:
if(listObject.objj[i].tipo == 5){
			glPushMatrix();
			float cuboX = listObject.objj[i].positionX;
			float cuboY = listObject.objj[i].positionY;
			float cuboZ = listObject.objj[i].positionZ;
			if(mode == GL_SELECT)
		             glLoadName(i); 			
			glTranslatef(cuboX, cuboY, cuboZ);
			//glColor3f(red,green,blue);
			glutSolidCube(1.0);
			glPopMatrix();
			}
		}
tra le varie cose ho anche definito :
codice:
void processHits (GLint hits, GLuint buffer[])
{
	unsigned int i, j;
	GLuint names, *ptr;

	printf ("hits = %d\n", hits);
	ptr = (GLuint *) buffer;
	for (i = 0; i < hits; i++)
	{ /*  for each hit  */
		names = *ptr;
		ptr+=3;
		for (j = 0; j < names; j++)
		{ /*  for each name */
			
			if(*ptr==1) printf ("oggetto %d", listObject.objj[j].tipo);
			if(*ptr==2) printf ("oggetto\n", listObject.objj[j].tipo);
			ptr++;
		}
		printf ("\n");
	}
}
anche se gli utlimi due if non vanno bene ma non sapevo come farli.....
questo è quanto, mi scuso se sono insistente....

maria