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 k
che 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.