Cos'è il Picking OpenGL®?
La selezione OpenGL® nella programmazione per computer è il processo per determinare quale oggetto all'interno di una scena tridimensionale (3D) si trova in un determinato punto dello schermo una volta che la scena è stata renderizzata. Può anche riferirsi alla localizzazione di più oggetti in un punto o all'interno di un riquadro. Molto spesso, la selezione OpenGL® viene utilizzata per determinare quale oggetto 3D sullo schermo un utente sta tentando di selezionare con un cursore del mouse. Sebbene questa operazione possa sembrare semplice, ci sono diverse sottigliezze nel modo in cui OpenGL rende una scena che può renderla abbastanza complessa. Inoltre, in alcune schede grafiche e driver sono presenti anomalie intrinseche che possono causare il fallimento della funzione di selezione OpenGL® e restituire risultati falsi.
Quando un utente sta guardando una scena 3D sul monitor di un computer, l'immagine risultante è nota come rendering della scena. La scena è in realtà memorizzata come una raccolta di forme primitive o poligoni, che a loro volta sono solo raccolte di punti 3D all'interno dello spazio della scena. Il computer utilizza le coordinate del mondo, a volte chiamate coordinate assolute, per eseguire la maggior parte delle funzioni di base che manipolano gli oggetti nella scena. Nella maggior parte delle applicazioni, l'utente è in grado di manovrare la vista della scena da diverse angolazioni, in modo che gli oggetti possano essere visti in diverse prospettive. La posizione virtuale dell'utente all'interno della scena si chiama angolo della telecamera o posizione della telecamera.
La complessità del picking OpenGL® deriva dalla determinazione della posizione del mouse sullo schermo bidimensionale (2D) da una posizione e un angolo possibilmente arbitrari all'interno della scena, la posizione della telecamera. Inoltre, poiché il rendering dal punto di vista del visualizzatore umano è in realtà 2D, l'utente non può fornire la profondità del clic del mouse all'interno della scena. La funzione di prelievo OpenGL® risolve questo complesso problema in due modi.
Il primo è che, invece di eseguire una serie di calcoli separati per tradurre in modo astratto dove si trova il visualizzatore e quindi trovare un oggetto nella finestra di rendering, la funzione rende effettivamente la scena così come funziona normalmente, con l'eccezione che il rendering ha utilizzato per la selezione non viene visualizzato, viene utilizzato solo per calcolare le posizioni corrette degli oggetti. La differenza è che, invece di rendere l'intera area che sarebbe visibile all'utente, esegue il rendering solo dell'area in cui si trova il mouse. Ciò significa che qualsiasi oggetto reso è tecnicamente nel punto in cui si trova il puntatore del mouse.
Il secondo problema, vale a dire non avere modo di indicare la profondità di un'area selezionata, viene risolto restituendo tutti gli oggetti che si trovano sotto le coordinate del mouse nella scena. La funzione di selezione OpenGL® restituisce tutti gli oggetti in un array insieme a quanto sono lontani dalla posizione dello spettatore. Ciò consente a un programma di trovare rapidamente l'oggetto più vicino, se lo si desidera.
Un modo per visualizzare il picking OpenGL® è immaginare una linea, a volte indicata come raggio nella programmazione 3D, spostandosi dalla posizione del puntatore del mouse nella scena e allontanandola dalla posizione dello spettatore. Ogni oggetto toccato da questo raggio viene aggiunto a una matrice di oggetti, insieme a quanto è lontano dallo spettatore. Questa è una spiegazione molto semplice di come funziona una forma di picking OpenGL®.
Un altro metodo di selezione degli oggetti in OpenGL® prevede la localizzazione di un oggetto per colore e può essere notevolmente più veloce. Questo metodo rende la scena ma, invece di applicare l'illuminazione e la trama agli oggetti, vengono invece resi con un unico colore semplice. Ogni oggetto o gruppo di oggetti ha il suo colore distinto. La scena viene renderizzata solo in memoria e non visualizzata, quindi ciò non influisce su ciò che l'utente vede. Invece di cercare collisioni 3D tra oggetti, viene restituito il colore nella posizione del cursore del mouse e quel colore sarà correlato a un oggetto specifico.