Tengo una escena THREE.js donde aparecen muchos elementos y necesito detectar en qué objeto está haciendo clic el usuario.Detectar objeto cliqueado en THREE.js
Lo que he hecho hasta ahora es el siguiente. La cámara no se mueve demasiado; solo cambia la posición vertical en una cantidad limitada, siempre mirando hacia el mismo punto. Mi método aproximado es el siguiente:
- tomo las coordenadas si el clic relativa a la lona
- que traducirlos en coordenadas horizontales y verticales en la escena WebGL por medio de un simple cambio de escala, y añadir una Z coordenada que está lo suficientemente lejos.
- Tomo un rayo horizontal a partir del punto anterior, construido por THREE.Ray()
- Uso ray.intersectObjects() para encontrar el primer elemento a lo largo del rayo.
Este método funciona aproximadamente, pero a veces está a unos pocos píxeles del punto real.
¿Existe una técnica más confiable para encontrar el objeto donde un usuario ha hecho clic?
El margen y el relleno pueden estar causando que sus coordenadas estén un poco desplazadas. ¿Lo contabilizaste? – Prusse
Por el momento en la demostración no hay margen ni rellenos, pero la técnica que describí no es exacta de todos modos. – Andrea
Eche un vistazo a [este ejemplo] (http://mrdoob.github.com/three.js/examples/canvas_interactive_cubes.html). –