PDA

View Full Version : [openGL]


soalle
22-01-2004, 11:09
Problema problemino...

Uso openGL + glut (+ glui) e c++...

Quando l'utente clicca sulla finestra openGL parte chiaramente la callback del mouse che mi restituisce le coordinate in pixel del punto su cui ha cliccato...
Io avrei bisogno di inserire un punto esattamente dove ha cliccato ma per fare ciò dovrei sapere le coordinate mondo del punto su cui ha cliccato... come faccio?

Grazie mille...


PS: ho visto dopo tanta assenza dal forum il nuovo moderatore :D:D:D Complimenti.... hai tutta la mia approvazione...

cionci
22-01-2004, 11:27
Grazie soalle ;)

buemuschiato
22-01-2004, 15:27
Questo dovrebbe esserti più che utile, non è proprio il tuo problema ma gli somiglia:

http://www.gamedev.net/community/forums/topic.asp?topic_id=201999

gluUnProject ( (double) mouse_x, (double) mouse_y, 0.0, modelMatrix, projMatrix, viewPort, &x, &y, &z );

- mouse_x e mouse_y te li prendi dalla callback del mouse,
- il tipo in questione chiede le coordinate globali per una profondità di 0.0 che sarebbe il piano di clipping vicino all'osservatore. z = 1 è il piano di clipping più lontano. In generale z deve essere calcolato volta per volta e passato alla funzione.

- x, y e z sono i valori in coordinate globali dove vai a scrivere

Ti rimando alla documentazione di gluUnProject() nel red book a pagina 110.

ciao

soalle
22-01-2004, 15:38
Non potevo chiedere di meglio :)...
Grazie mille ci do un'occhiata...

soalle
22-01-2004, 15:43
Altra domandina...
Ho una finestra GLUT con dentro controlli GLUI che mi diminuiscono l'area visibile (ma credo che questo non porti alcun problema...)
Il fatto è che se ridimensiono la finestra in altezza, un uqdrato mi rimane quadrato e mi diminuisce leggermente le dimensioni per poterlo visualizzare completamente...
Se invece ridimensiono la finestra in larghezza, il quadrato non viene deformato ma non mi diminuisce in dimensioni facendolo uscire dalla finestra stessa dopo poco...

questo è il codice della callback di reshape:

int tx, ty, tw, th;
GLUI_Master.get_viewport_area( &tx, &ty, &tw, &th );
glViewport( tx, ty, tw, th );
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective (45.0, ((double)tw)/((double)th), 2.0, 8.0);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef (0.0, 0.0, -5.0);


grazie ancora...