2017-05-21 1 views
1

Je crée un labyrinthe jouable dans Three.js. Tous les objets - le sol, le plafond et les murs - ont été placés dans des axes X et Z positifs. La caméra est placée comme ceci:Les commandes de la caméra sont opposées à ce qu'elles devraient être. Pourquoi?

camera = new THREE.PerspectiveCamera(45, 
             window.innerWidth/window.innerHeight, 
             0.1, 
             1000 
    ); 
    camera.position.set(0, 0.25, 0); 

    // The camera is placed pointing to the nearest open path from the 
    // initial position. Check mazeGenerator.js for the reference of 
    // "coordinates". 
    if(grid[1][0] == coordinates.W) 
    { 
     camera.lookAt(new THREE.Vector3(1, 0.25, 0)); 
    } 
    else 
    { 
     camera.lookAt(new THREE.Vector3(0, 0.25, 1)); 
    } 

et il se déplace comme ça:

function keyboardCheck() 
{ 
    var movementSpeed = 0.02; 
    var rotationSpeed = 0.03; 

    if(keyboard.pressed('w') || keyboard.pressed('up')) 
    { 
     camera.translateZ(-movementSpeed); 
    } 

    if(keyboard.pressed('a') || keyboard.pressed('left')) 
    { 
     camera.rotateY(rotationSpeed); 
    } 

    if(keyboard.pressed('d') || keyboard.pressed('right')) 
    { 
     camera.rotateY(-rotationSpeed); 
    } 
} 

Si je place l'appareil photo sans la fonction lookAt, il semble qu'il fait face [0, 0, 0], mais bien sûr ce que je voulais faire était d'aider le joueur un peu en faisant face à la caméra le chemin ouvert le plus proche possible. Pour le faire avancer, je dois décrémenter Z, car sinon, lorsque vous appuyez sur la touche "avancer", elle recule. Cela me fait penser que même si je dis à la caméra de regarder dans une certaine direction, l'axe Z de l'objet est opposé à l'axe Z du monde.

La question est: pourquoi cela se passe-t-il?

Merci beaucoup d'avance.

Répondre

1

La caméra regarde vers le bas son axe z négatif, pour ainsi aller de l'avant, faire:

camera.translateZ(- distance); 

Tous les autres objets sont considérés comme en regardant dans la direction de leur axe positif-z, donc pour avancer d'autres objets, vous utiliseriez

object.translateZ(distance); 

trois.js r.85

+0

Cristal clair. Je vous remercie :) – MikelAlejoBR