2017-06-15 6 views
0

je placer un objet devant la caméra à l'aideobjet ensemble devant la caméra dans un dolly

 var dist = -100; 
     var vec = new THREE.Vector3(0, 0, dist); 
     vec.applyQuaternion(camera.quaternion); 
     object.position.copy(vec); 
     object.lookAt(camera.position); 

Cela fonctionne vraiment bien.

Je dois maintenant faire pivoter l'appareil photo (pour un lecteur vidéo VR) pour définir sa position de départ et pour cela et continuer à travailler avec WebVR, j'ajoute la vidéo à un objet Dolly et je la fais tourner.

dolly = new THREE.Group(); 
    dolly.position.set(0, 0, 0); 
    scene.add(dolly); 

    camera.up.set(0, 1, 0); 
    dolly.add(camera); 

Et l'objet n'est maintenant pas devant la caméra. J'essaie d'appliquer la rotation du chariot au vecteur pour prendre en compte cet angle.

 var rotation = new THREE.Euler().setFromQuaternion(camera.quaternion, camera.rotation.order); 
     rotation.y += dolly.rotation.y; 
     var quat = new THREE.Quaternion().setFromEuler(rotation, camera.rotation.order); 
     vec.applyQuaternion(quat); 

Cela fonctionne la plupart du temps lorsque l'appareil photo est des angles particuliers mais parfois pas, et l'objet est également mis en rotation sur son axe x. Je suppose rotation.y += dolly.rotation.y est faux, mais je ne suis pas sûr d'un meilleur moyen de fusionner les chiffres.

+0

Vous pouvez simplement ajouter votre objet directement à l'objet '' ... de camera' camera.add (objet); 'Cette placera l'objet dans l'espace de la caméra, et il suivra automatiquement les mouvements et les rotations de la caméra. – TheJim01

+0

Merci @ TheJim01, oui je le faisais avant, mais l'élément a des éléments sélectionnables, donc l'appareil photo doit être capable de regarder différentes parties. Je vais y revenir si je dois essayer d'éviter cela. – user5839

Répondre

0

@WestLangleys répondent ici three.js tween object to front of camera

répondu à ma question

 var pLocal = new THREE.Vector3(0, 0, dist); 

     var target = pLocal.applyMatrix4(camera.matrixWorld); 

     object.position.copy(target); 
     object.lookAt(camera.position);