2017-05-17 2 views
0

Je voudrais dessiner une primitive où le Raycaster ou la télécommande pointe. Je suis à la recherche d'une méthode "get Orientation" dans aframe ou three.js. Y a-t-il un moyen simple et rapide d'obtenir les coordonnées du monde, où mon contrôleur pointe-t-il? Merci d'avance!Daydream Controller Orientation

Mise à jour: Voici le code:

HTML: [...]

<a-entity id="remote" daydream-controller raycaster="objects: .selectable"> 
<a-cone id="ray" color="cyan" position="0 0 -2" rotation="-90 0 0" radius bottom="0.005" radius-top="0.001" height="4"></a-cone> 
<a-box id="position-guide" visible="false" position="0 0 -2"></a-box> 
</a-entity 

Voici le javascript pour le HTML:

var rayEl = document.querySelector('#remote'); 
rayEl.addEventListener(
var rayElDirection = new THREE.Vector3(0,0,-1); 
rayEl.object3D.getWorldDirection(rayElDirection); 
console.log("Raycaster Direction: " + rayElDirection); 

Répondre

0

Pour obtenir des données de Daydream chargées à un Object3D, I found a PR that i'm not sure is in the current build, mais vous pourriez probablement le charger comme son propre script, tant qu'il charge après trois.js.

Une fois que vous avez, vous pouvez obtenir l'orientation du contrôleur - car il étend THREE.Object

Vous pouvez consulter Object3D's documentation pour trouver des fonctions disponibles. TROIS.Object.getWorldDirection() vous donnerait un vecteur d'où le contrôleur Daydream est pointé.

Combinez cela avec .getWorldPosition(), et vous pourriez, par exemple, mettre une représentation du contrôleur à cet emplacement dans la scène à des fins de débogage.

+0

Merci! J'ai essayé la fonction getWorldDirection(), mais elle semble me donner la position actuelle du contrôleur, pas la direction vers laquelle il pointe. J'ai déjà essayé différentes façons, mais rien ne semble fonctionner. Quand j'ai essayé de sortir l'information du quaternion, les valeurs ne semblaient pas non plus représenter la direction réelle. J'ai essayé ce qui suit avec la direction: 'var rayElDirection = new THREE.Vector3 (0,0, -1); rayEl.object3D.getWorldDirection (rayElDirection); ' Mais comme je l'ai mentionné, il semble que seule la position à distance actuelle est atteinte. – JllX

+0

Je ne sais pas ce qu'est rayEl. Pouvez-vous lier à la mise en œuvre que vous utilisez pour accéder au contrôleur Daydream? Si vous chargez des données dans un object3d, cela ne fonctionnera pas. Il peut également être tourné de 90 degrés ou tout ce qui signifie que vous pourriez avoir besoin de rotation, mais il devrait être un vecteur d'unité pointant le long de l'axe Z positif. Daydreamcontroller.getworlddirection() retournera un vecteur qui pointe le long de l'axe positif de cet objet. C'est juste ce que fait la fonction. getworldposition() d'autre part retournera la position de cet Object3D. Il suffit de partager le code ou ne peux pas aider – OtterFamily