Questo è probabilmente un problema molto semplice, ma non ho ancora trovato una soluzione e mi ha infastidito. Mi piacerebbe mostrare le frecce che indicano le direzioni delle coordinate del mondo (x, y, z) nell'angolo in basso a destra della fotocamera, come in Maya, in modo che quando si ruota la fotocamera attorno a un oggetto o si muova attraverso una scena, puoi ancora identificare le direzioni delle coordinate del mondo. Ho cercato di farlo utilizzando due approcci diversi e nessuno dei due ha funzionato finora.Three.js: Mostra gli assi delle coordinate mondiali nell'angolo della scena
Ho un oggetto con tre frecce da bambino utilizzando la classe THREE.ArrowHelper
, lo chiameremo per il momento XYZ
. Il primo approccio consiste nel rendere XYZ
un figlio della scena e fornirgli una posizione calcolata dalla posizione corrente della fotocamera più un offset nella direzione in cui la telecamera sta puntando e regolarlo in modo che appaia nell'angolo in cui lo voglio invece che nel centro dello schermo. Ho quasi funzionato, poiché le frecce mantengono la rotazione corretta, ma la posizione è un po 'strana e ho smesso di seguire questa strada perché era davvero "nervosa" quando si spostava la fotocamera. Non sono sicuro che si tratti di un problema di prestazioni o qualcos'altro.
Il secondo metodo è quello di fare XYZ
un figlio della fotocamera con una posizione locale offset e poi invertire la rotazione della telecamera e applicare la rotazione inversa, che XYZ
in modo che corrisponda coordinate mondo. Mi sembra di essere vicino usando questo metodo, ma posso o ottenere la posizione corretta, o la rotazione corretta, non entrambi.
Attualmente sto usando il codice XYZ.matrix.extractRotation(camera.matrixWorldInverse);
per fornirmi l'orientamento corretto per XYZ
, ma il suo posizionamento è disattivato. Se utilizzo XYZ.matrixWorld.extractRotation(camera.matrixWorldInverse);
, la posizione rimane valida (collegata alla fotocamera) ma l'orientamento non cambia.
Se qualcuno ha un attacco rapido per farlo funzionare, sarebbe molto apprezzato. Se hai un metodo migliore, rispetto a quello che sto perseguendo, sarebbe anche utile.
** - EDIT - ** probabilmente dovrei dire che è possibile trovare la versione di lavoro qui - (https://googledrive.com/host/0B45QP71QXoR0Mm9Mbkp3WGI1Qkk/) Sto memorizzare il mio codice in Google Drive, ma lavoro a livello locale con WAMP e aliasing che significa che tutte le modifiche che rendono localmente si riflettono online non appena l'unità di Google si sincronizza. OSSIA potrebbe essere rotto quando dai un'occhiata.
Manca quel collegamento in qualche modo. Vedrò questo metodo e tornerò da te. Tuttavia, mi chiedo se aggiungere una seconda videocamera ridurrà le prestazioni più che far funzionare uno dei miei metodi sopra indicati? – wackozacko
Funziona! Dovevo rimuovere la riga 'camera2.position.sub (controls.target);' come OribtControls.js non mantiene una posizione di destinazione, ma altrimenti la soluzione è praticamente la stessa. – wackozacko
Non rimuovere la linea. Utilizzare 'controls.center' in r.58. – WestLangley