I have done something similar and it's working perfectly for me in selecting one of collada model and getting it's name and id using raycaster. (There are multiple collada models rendered in a scene).
Here is the snippet of code and steps that is working for me :
- Create new directionvector object as a global variable.
var directionVector = new THREE.Vector3();
- Create new mouse, raycaster, and projector object as global variables.
var mouse = new THREE.Vector2(); var raycaster = new THREE.Raycaster(); var projector = new THREE.Projector();
Create onDocumentMouseMove event function and attach it into your collada model container (the DOM where your renderer.domElement placed) after your collada models are loaded.
function onDocumentMouseMove( event ) { event.preventDefault(); mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1; mouse.y = -( event.clientY / window.innerHeight ) * 2 + 1;
}
your_collada_model_container.mousemove( onDocumentMouseMove );
Attach on click event into your collada model container (the DOM where your renderer.domElement placed).
When your container is clicked, call this function :
function selectColladaModel(){
directionVector.set(mouse.x, mouse.y, 1); projector.unprojectVector(directionVector, camera); directionVector.sub(camera.position); directionVector.normalize(); raycaster.set(camera.position, directionVector); var intersects = raycaster.intersectObjects(scene.children, true); if (intersects.length) { var target = intersects[0].object; if(target){ console.log(target.name+" "+target.id); } }
}