2017-05-11 9 views
1

J'ai réglé position et fov de mon perspective camera manuellement dans TROIS.JS. Il se comporte comme prévu. Cependant, une fois que j'essaie d'interagir avec le scene plus tard, à travers le TrackBall Controls, il affiche simplement un écran noir, pas d'erreurs.Réglage de la position de la caméra et fov manuellement avec les contrôles trackball (THREEJS)

JS Fiddle

Code pertinent:

var bbox = new THREE.Box3().setFromObject(scene); 
var center = bbox.getCenter(); 
var size = bbox.getSize(); 

// update some controls properties 
controls.target.set(center.x, center.y, center.z); 

// position the camera on the y axis 
camera.position.set(center.x, center.y - size.y, center.z); 

// fit FOV 
var dist = size.y/2; 
var fov = 2 * Math.atan(size.z/(2 * dist)) * (180/Math.PI); 

camera.fov = fov; 

camera.updateProjectionMatrix(); 

Quelle étape que je manque pour pouvoir interagir ensuite correctement avec les scene

Merci

==== entre les contrôles

Wor King Fiddle basé sur la réponse acceptée: Fiddle

Répondre

2

Je pense qu'il n'est pas possible de projeter correctement un cas lorsque la position "up" de la caméra est parallèle au vecteur défini par la position et la cible de la caméra. La position de la caméra doit spécifier comment orienter la vue dans un plan orthogonal au vecteur depuis la position de la caméra jusqu'à la cible, mais si la composante de la caméra le long de ce plan est nulle, elle ne peut pas fonctionner. Dans votre code:

  • la caméra position "up" est la valeur par défaut (0,1,0)
  • le vecteur de la position de la caméra à l'objectif de la caméra est (0, size.y, 0)

la solution la plus simple est probablement de spécifier un autre appareil photo « up », à savoir

camera.up = new THREE.Vector3(0,0,1.); 

ou tout autre vecteur non parallèle à la direction y.

+0

Merci! Ajout d'un nouveau fichier dans la question avec la réponse - – Nicolas