Salve a tutti spero mi possiate aiutare!
Il problema è che quando clicco su un oggetto il sistema me lo riconosce solo che seleziona qualunque oggetto che sta all'interno della scena visibile...
Ecco il codice:
Questa è la display:codice:void list_hits(GLint hits, GLuint *names){ /** * Per ogni tocco sono allocati 4 bytes * Scrivo per comodità in realtà non mi serve più avanti questo abiliterà la luce direzionale * sull'oggetto */ for (int i = 1; i < hits; ++i){ printf("Numero di click: %d\n" "Min Z: %d\n" "Max Z: %d\n" "Oggetto cliccato: %d\n", (GLubyte)names[i * 4], (GLubyte)names[i * 4 + 1], (GLubyte)names[i * 4 + 2], (GLubyte)names[i * 4 + 3] ); printf("\n"); /*if((GLubyte)names[i * 4 + 3] == 11 && click1 == false) { click1 = true; }else if((GLubyte)names[i * 4 + 3] == 11 && click1 == true) click1 = false; //sta roba mi abilita il tasto premuto*/ } } void gl_select(int x, int y){ GLuint buff[64] = {0}; GLint hits, view[4]; //Questo sceglie il buffer dove verranno inseriti i valori glSelectBuffer(64, buff); //Questo prende informazioni sulla viewport glGetIntegerv(GL_VIEWPORT, view); glRenderMode(GL_SELECT); // Da l'avvio per inizializzare i nomi glInitNames(); glPushName(0); //Questo mi restringe l'area di selezione attorno al cursore glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity(); gluPickMatrix(x, (view[3] - y), 3.0f, 3.0f, view); gluPerspective(45.0f, (view[2] - view[0]) / (view[3] - view[1]), 0.1f, 100.0f); glMatrixMode(GL_MODELVIEW); glutSwapBuffers(); display(); glMatrixMode(GL_PROJECTION); glPopMatrix(); //Questo mi dice quanti sono gli oggetti scritti nell'area hits = glRenderMode(GL_RENDER); //Scrive gli oggetti nella lista list_hits(hits, buff); glMatrixMode(GL_MODELVIEW); } /** * Callback per la gestione dei click del mouse */ void processMouse(int button, int state, int x, int y) { if ((button == GLUT_LEFT_BUTTON) && (state == GLUT_DOWN)){ gl_select(x,SH-y); } }
codice:void display(){ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); cameraMov(); glMatrixMode(GL_PROJECTION); glLoadIdentity(); GLdouble ratio = static_cast<GLdouble>(width) / static_cast<GLdouble>(height); gluPerspective(45, //angolo di visuale ratio, //aspect ratio (rapporto tra larghezza e altezza) 1, //Z near cutting plane 1000); //Z far cutting plane glMatrixMode(GL_MODELVIEW); creaPavimento(); creaDome(); if(click1){ glutSolidSphere(0.4, 20, 20); } glFlush(); glutSwapBuffers(); }

Rispondi quotando