2013-06-20 10 views
5

Sto provando a mettere un oggetto davanti alla telecamera, ma non sono stato in grado di farlo.Come mettere un oggetto davanti alla videocamera in THREE.JS?

Sto usando i FlyControls per spostare la telecamera e ora voglio mettere un oggetto di fronte ad essa. Come posso fare questo? Ho provato molti modi diversi, ma non ci sono riuscito.

Grazie

+0

Puoi mostrare qualche codice in modo che possiamo vedere dove si trova l'errore? – gaitat

risposta

1
var cx, cy, cz, lx, ly, lz; 



dir.set(0,0,-1); 
dir.applyAxisAngle(0,camera.rotation.x); 
dir.applyAxisAngle(1,camera.rotation.y); 
dir.applyAxisAngle(2,camera.rotation.z); 
var dist = 100; 

cx = camera.position.x; 
cy = camera.position.y; 
cz = camera.position.z; 

lx = dir.x; 
ly = dir.y; 
lz = dir.z; 


var l; 

l = Math.sqrt((dist*dist)/(lx*lx+ly*ly+lz*lz)); 

var x1, x2; 
var y1, y2; 
var z1, z2;  

x1 = cx + lx*l; 
x2 = cx - lx*l; 

y1 = cy + ly*l; 
y2 = cy - ly*l; 

z1 = cz + lz*l; 
z2 = cz - lz*l; 


nanobot.position.set(x1, y1, z1); 

ho cercato di calcolare il vettore direzione della direzione della telecamera, e quindi calcolare la linea che passa attraverso la camera, mettere un punto su questa linea ad una distanza dalla telecamera

15

Hai provato a trasformare il tuo oggetto in una fotocamera della tua fotocamera e poi a tradurlo in avanti?

camera.add(nanobot); 
nanobot.position.set(0,0,-100); 

I posti al di sopra del nanobot permanentemente 100 unità di fronte alla macchina fotografica ... e questo è dove rimarrà fino a che fare:

camera.remove(nanobot); 

... a quel punto dovrebbe resta dove si trova nello spazio globale finché non lo sposti usando un altro metodo.

+4

devi anche rendere la fotocamera un elemento secondario della scena (normalmente non predefinita) 'scene.add (camera)' – mattdlockyer

+0

assicurati che 'nanobot.position.set (0,0, -100);' sia ** dopo ** 'camera.add (nanobot);': 'position' è la posizione locale relativa alla telecamera. [trejs r89] – zwcloud

1

Ecco un altro metodo - applicando la Quarternion della fotocamera ad un vettore (dist è così lontano dalla telecamera che si desidera l'oggetto deve essere):

var vec = new THREE.Vector3(0, 0, -dist); 
vec.applyQuaternion(camera.quaternion); 

nanobot.position.copy(vec); 

rendendo l'oggetto un figlio del didn fotocamera funziona per me, ma questo metodo applyQuarternion ha (adattato dalla risposta di @ WestLangley qui: Three.js: Get the Direction in which the Camera is Looking)

Si potrebbe desiderare di copiare anche la rotazione dalla fotocamera, se si desidera che sia sempre rivolta verso la fotocamera. E se vuoi modificare la posizione esatta dell'oggetto dopo questo, puoi tradurreX, tradurreY ecc.

Problemi correlati