2013-05-17 1 views
0

Je souhaite déplacer la lumière avec mon appareil photo. je l'ai écrit:three.js Mauvaise position de la caméra lors du déplacement de la lumière avec TrackballControls

scene = new THREE.Scene(); 

    camera = new THREE.PerspectiveCamera(40, windowWidth/windowHeight, 1, 10000); 
    camera.position.z = 50; 
    scene.add(camera); 


    var dirLight = new THREE.DirectionalLight(0xffffff); 
    **dirLight.position = camera.position;** 
    dirLight.position.normalize(); 
    scene.add(dirLight); 

    renderer = new THREE.WebGLRenderer(); 
    renderer.setSize(windowWidth, windowHeight); 
    i_container.appendChild(renderer.domElement); 

    controls = new THREE.TrackballControls(camera); 

    controls.rotateSpeed = 1.0; 
    controls.zoomSpeed = 1.2; 
    controls.panSpeed = 0.8; 

    controls.noZoom = false; 
    controls.noPan = false; 

    controls.staticMoving = true; 
    controls.dynamicDampingFactor = 0.3; 

    controls.keys = [65, 83, 68]; 

    controls.addEventListener('change', render); 

Tout fonctionne: la lumière se déplace avec la caméra. Mais il y a un problème: quand la scène est en train d'initialiser la caméra est à l'intérieur de mon objet. Donc, je devrais zoomer pour voir l'objet entier.

Sans cette ligne - "dirLight.position = camera.position;" la scène s'initialise ok: je vois tout l'objet.

Pourriez-vous m'expliquer ce qui ne va pas? Je ne change pas la position de la caméra. Pourquoi suis-je à l'intérieur de l'objet?

Merci, Zhenya

Répondre

0

Cela n'a rien à voir avec TrackballControls. C'est parce que

dirLight.position = camera.position; 
dirLight.position.normalize(); 

normalise la position de la caméra.

Supprimer dirLight.position.normalize(); ce n'est plus nécessaire.

En fait, j'utiliserais un pointLight à la place, mais ce que vous faites fonctionne sous la version actuelle de three.js.

trois.js r.58

Questions connexes