J'ai une scène THREE.js où beaucoup d'éléments apparaissent, et j'ai besoin de détecter sur quel objet l'utilisateur clique.Détecter un objet cliqué dans THREE.js
Ce que j'ai fait jusqu'à présent est le suivant. La caméra ne bouge pas beaucoup - elle change seulement la position verticale d'une quantité limitée, en regardant toujours vers le même point. Ma méthode approximative est la suivante:
- Je prends les coordonnées si le clic par rapport à la toile
- je les traduire en coordonnées horizontales et verticales de la scène WebGL au moyen d'un renormalisation simple, et ajouter un Z coordonnée qui est suffisamment loin.
- Je prends un rayon horizontal à partir du point ci-dessus, construit par THREE.Ray()
- J'utilise ray.intersectObjects() pour trouver le premier élément le long du rayon.
Cette méthode fonctionne approximativement, mais elle est parfois éloignée de quelques pixels du point réel.
Existe-t-il une technique plus fiable pour trouver l'objet sur lequel un utilisateur a cliqué?
Margin et le bourrage peuvent être en train de provoquer un décalage de vos coordonnées. L'avez-vous expliqué? – Prusse
Pour le moment dans la démo, il n'y a pas de marge ni de paddings, mais la technique que j'ai décrite n'est pas exacte de toute façon. – Andrea
Jetez un coup d'œil à [cet exemple] (http://mrdoob.github.com/three.js/examples/canvas_interactive_cubes.html). –