2014-06-13 6 views
0

Je souhaite avoir un projecteur qui bougera avec l'appareil photo. le code suivant fonctionne si je veux seulement garder les projecteurs braqués sur la même position que la caméra à tout moment:Comment déplacer le (s) projecteur (s) par rapport à la position de la caméra dans Three.js?

var pointLight = new THREE.PointLight(0xffffff, 1, 200); 
pointLight.position = camera.position; 
scene.add(pointLight); 

Cependant, comment puis-je le faire fonctionner pour que les projecteurs sont toujours devant la caméra d'une certaine distance? Ou généralement, toujours dans la même position par rapport à la position de la caméra?

Répondre

2

Ajoutez de la lumière à la hiérarchie de la caméra. Le système de coordonnées de la lumière est par rapport à celui de la caméra. Ensuite, déplacez-le simplement le long de l'axe z.

camera.add(pLight); 
pLight.position = new THREE.Vector3(0,0,10); 
+1

Merci! J'ai d'abord pensé que je pouvais régler la position de la lumière du point à l'intérieur de la fonction render() comme ceci 'pointlight.position.z = camera.position.z - 10' pour qu'elle bouge à chaque image, mais votre solution est plus propre et plus claire. plus lisible. –

+0

Votre solution ne fonctionne également que si la caméra regarde le long de l'axe z négatif. Mettre l'objet dans la hiérarchie compte également pour la rotation de la caméra. Une autre façon serait de trouver le vecteur avant de la caméra, de sorte que vous puissiez écrire 'pLight.position = camera.position + camForwardVec * distance;'. –

+0

Cette solution fait dépendre l'intensité apparente de la lumière de la proximité de la caméra par rapport à l'objet. (Mais, d'accord, c'est peut-être quelque chose que vous voulez vraiment). Je n'ai pas pu résoudre ce problème en réglant le troisième paramètre de PointLight à zéro. – Ideogram

-1

Vous pouvez simplement faire:

point.position = camera.position 

chaque fois avant de rendre.

Si vous utilisez quelque chose comme OrbitControl il ressemblerait à ceci:

orbit.addEventListener('change', function() { 
    render(); 
}); 

function render() { 
    lights.point.position = camera.position; 
    renderer.render(scene, camera); 
} 

Hope this helps!

+0

Je ne suis pas sûr que cela répond à ma question ..? Comment cela me permet-il de garder le point lumineux devant la caméra tout en bougeant? Autant que je sache, cela fait la même chose que le code que j'ai posté. –

Questions connexes