2015-04-30 9 views
5

Ho creato una scena base usando three.js. Il mio obiettivo è quello di realizzare una videocamera pov basata su FirstPersonControls.jstre.js pov fotocamera guardarsi intorno bug

Ho modificato il suo codice per adattarlo alle mie esigenze (vista in movimento su clic del mouse, ecc.) Ho quasi finito ma rimane un errore: quando sposto la fotocamera la prima volta, non inizia a spostarsi dalla posizione dell'oggetto che sto osservando sul carico della scena.

Questo accade solo quando si imposta la posizione di una telecamera. In caso contrario, quasi opere, come si può vedere su questo link: http://jsfiddle.net/42qeojs0/

Basta togliere il commento alle 3 linee (dopo la linea 60)

camera.position.x = 10; 
    camera.position.y = 10; 
    camera.position.z = 250; 

Quindi, cercare di spostare la vista intorno all'oggetto mediante trascinamento il tuo mouse Vedrai che la posizione iniziale della tua resistenza non è la stessa della posizione in cui prima guardi.

Grazie in anticipo

risposta

1

Per correggere il salto iniziale intorno che si ottiene quando si fa clic sul mouse. Introdurre una nuova variabile dist per la distanza dell'oggetto che si sta guardando e utilizzare atan2 come metodo più affidabile per ottenere la longitudine.

dist = Math.hypot(blue1.position.x,blue1.position.y,blue1.position.z); 
phi = Math.acos(blue1.position.y/dist); 

theta = Math.atan2(blue1.position.z,blue1.position.x); 

lon = THREE.Math.radToDeg(theta); 
lat = 90-THREE.Math.radToDeg(phi); 

In onDocumentMouseMove utilizzare

camera.target.x = dist * Math.sin(phi) * Math.cos(theta); 
camera.target.y = dist * Math.cos(phi); 
camera.target.z = dist * Math.sin(phi) * Math.sin(theta); 

In questo modo se si prende la posizione iniziale, calcolare lat, long e dist, e quindi calcolare il guardando vettore si ottiene ciò che si è iniziato con. L'uso di un multiplo fisso di 500 in effetti ha fatto un balzo improvviso in una posizione più lontana di quanto avevi iniziato. (Nota Math.Hypot non è supportato in IE quindi potresti aver bisogno di calcolarlo tu stesso se scegli IE di destinazione).

+0

Ho aggiornato il jsfiddle con il tuo codice: http://jsfiddle.net/42qeojs0/3/ Il salto iniziale ora è fisso ma come puoi vedere alla linea 124 e sotto lo spostamento è difficile, specialmente quando provi per andare in alto a destra con il mouse. La riga 129 e sotto risolve ma riabilita il salto iniziale. Sembra che dovremmo combinare entrambi i codici ma non capire come. Grazie – Rotan