Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - trasformare le coordinate 2D del mouse in 3D
Forum - C/C++ - trasformare le coordinate 2D del mouse in 3D

Avatar
genni_96 (Normal User)
Pro


Messaggi: 108
Iscritto: 04/06/2010

Segnala al moderatore
Postato alle 11:51
Sabato, 19/03/2011
Ciao a tutti,
non so se questa è la sezione giusta, forse avrei dovuto pubblicare in "algoritmi",
comunque il mio problema è questo:
Vorrei interaggire in una scena 3D create con le openGl con il mouse, solo che non ho alcuna idea di come controllare se le coordinate del mouse "toccano" o no un oggetto 3D. Ho pensato che si potesse risolvere con delle funzioni trigonometriche, ma ho bisogno di qualcosa da cui partire per scrivere il codice.
Ovviamente non vi sto chiedento di scrivermi il codice, ma solo di darmi qialche dritta approposito, Grazie

PM
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Up
1
Down
V
Segnala al moderatore
Postato alle 20:36
Sabato, 19/03/2011
La procedura è spiegata abbastanza bene su questa pagina: http://msdn.microsoft.com/en-us/library/bb203905%28v=xnaga ...

Ovviamente alcune parti richiederanno un po' di lavoro da parte tua, XNA offre tutte le funzioni già pronte per far questo genere di operazioni, ma in C++ se non stai usando un engine 3D dovrai ricostruirtele (o trovare una libreria che le abbia).

Ultima modifica effettuata da pierotofy il 19/03/2011 alle 20:37


Il mio blog: https://piero.dev
PM
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Up
1
Down
V
Segnala al moderatore
Postato alle 17:24
Domenica, 20/03/2011
La procedura si chiama "picking" in letteratura.

un po' di materiale a riguardo: http://www.google.it/search?rlz=1C1AVSX_enIT405IT405&sourc ...

La tecnica base è un po' articolata, ma semplice se conosci la geometria:
Un punto sullo schermo identifica una retta nello spazio 3D.

I parametri direzionali della retta li ricavi moltiplicando il vettore (x,y,1) per l'inversa della matrice di proiezione.

Una volta ricavati i parametri direzionali, devi moltiplicare il risultato per l'inverso della matrice di Model View di ogni singolo oggetto da testare. Questo ti da la retta nello spazio locale dell'oggetto. A quel punto farai un test di intersezione ray-AABB oppure ray-Sphere in base alla forma dell'oggetto. Se il test è positivo, e se ti serve maggiore precisione, fai un secondo test Ray-Triangle per ogni triangolo del modello. Se intersechi almeno un triangolo, hai toccato sicuramente l'oggetto.

Ma visto che sei del 96 e hai quindi qualcosa come 14-15 anni, dubito che avrai la voglia di andarti a studiare libri universitari di geometria per risolvere questo semplice problema :-)

Ciao ;)

PM
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2765
Iscritto: 21/09/2007

Up
0
Down
V
Segnala al moderatore
Postato alle 12:10
Sabato, 19/03/2011

eh, dato il tuo nick ti consiglierei di lasciar perdere perchè oltre a fare un copia incolla di calcoli astrusi con le coordinate non riusciresti a fare.

ad ogni modo il metodo è semplice: hai i vettori della telecamera sulla scena, questi vettori identificano un piano 3D. I movimenti del mouse devono essere tradotti in 3d proiettandoli su questo piano :)

Esempio? - pierotofy - 19/03/11 20:33
PM