Ad un certo punto del mio tempo a e-on ho mantenuto il gizmos della linea di prodotti Vue .
Posso dirti che ci vorranno più giorni, a tempo pieno.
A meno che non trovi una libreria o un modo super intelligente, il modo classico è quello di ottenere le coordinate del mouse nella finestra quando fai clic, se è una coordinata relativa al viewport, puoi semplicemente dividere xey per larghezza e altezza, tu ottiene un vettore (float 2d) nell'intervallo [0,1]. sottrarre (0,5,0,5) per ottenere un intervallo [-0,5, 0,5] sia per x che per y.
Quindi, si crea un raggio da questa coordinata usando semplicemente xey come raggio xey, e si imposta z sulla distanza focale. a volte le proporzioni sono un dolore nel culo in questa operazione. Un po 'di errori di prova e di prova ti riparerà.
Quindi, devi controllare l'intersezione con i tuoi elementi gizmos, o hai una mesh che hai generato, o modellato in blender o altri DCC, o parti mesh che possono articolarsi tra loro ... Basta usare quelle parti mesh come un raggio / query di intersezione triangolare.
O se ce l'hai, raggio / cilindro, raggio / sfera secondo il tuo aspetto e le parti gizmo.
È necessario disporre di routine di intersezione in grado di applicare una matrice di trasformazione sulla primitiva in cui si scontrano . È estremamente importante perché il tuo gizmo si tradurrà con l'oggetto che serve a muoversi, ruoterà e si ridimensionerà con l'inverso della distanza dalla telecamera, in modo da mantenere una dimensione proiettata fissa sullo schermo.
Quindi hai la parte di interazione, il più semplice è prendere il delta del punto in cui il mouse è stato il primo evento "mouse down", e l'attuale posizione di "Spostamento del mouse", in puro 2D, e usare questo delta come movimento dell'asse corrente nello spazio mondiale, moltiplicato per alcuni kche decidi empiricamente. Secondo le tue unità interne rispetto al pixel rispetto all'attuale scala di zoom ecc.
Il passaggio finale è semplicemente quello di applicare la matrice di gizmo all'oggetto manipolato, in modo che lo segua.
Ti dico che è un bel viaggio all'inferno da implementare, e se lo stai facendo nel tuo tempo libero, attendi più di una settimana. Più settimane se stai scoprendo completamente il campo. Più di un mese se i tuoi fine settimana sono impegnati con altre attività :)
Ti suggerisco di scaricare Embree 2.0 da Intel per eseguire la query di intersezione raggio / triangolo per te, quindi non devi preoccuparti di codificarlo. Oppure potresti copiare / incollare senza pietà e adattare il codice dal frullatore ... Penso che siano passati alla licenza Apache? Dovrebbe essere possibile legalmente.