2014-05-21 2 views
-1

Ok, voici le problème: J'utilise un PerspectiveCamera en tant qu'enfant d'un Object3d pour le chasser.Obtenir l'orientation d'un enfant Object3d

... 
player.add(backCamera); 
backCamera.position.set(0, 10, -80); 
backCamera.lookAt(player.position); 
... 

Maintenant, je suis en train d'utiliser un raycaster pour trouver les objets entre la caméra et le joueur et les rendre invisibles, mais j'ai besoin de la position de la caméra et l'orientation de la caméra.

Merci à ce question j'ai pu trouver la position de la caméra « true » comme ça:

... 
player.updateMatrixWorld(); 
var vector = new THREE.Vector3(); 
var temp = vector.setFromMatrixPosition(backCamera.matrixWorld); 
... 

mais je dois encore trouver l'orientation de la caméra « true ». J'ai essayé de suivre this approach et l'approche liée à cette question aussi.

... 
var pLocal = new THREE.Vector3(0, 0, -1); 
var pWorld = pLocal.applyMatrix4(backCamera.matrixWorld); 
var direction = pWorld.sub(backCamera.position).normalize(); 

raycaster.set(temp, direction); 
... 

mais semble que le rayon n'est pas correctement orienté, probablement parce que l'orientation est relative à l'objet parent.

+0

Étant donné que la caméra est un enfant d'un autre objet, vous devez soustraire la position du monde de la caméra - pas 'camera.position'. – WestLangley

+0

hmm @WestLangley pourquoi n'existe-t-il pas de .setFromMatrixRotation? Je pensais qu'il pourrait juste l'utiliser, mais il manque ... – Doidel

+0

Ah l'ai eu: https://github.com/mrdoob/three.js/issues/4585 – Doidel

Répondre

1

Connaissant la position cible (par exemple, TP, Position cible) que la caméra regarde, et vous connaissez la position de la caméra (par exemple, VRP, View Point de référence), l'orientation de la caméra est simplement donnée par:

TP-VRP 

Que vous souhaitiez également normaliser.