three.js - naming a multiple collada objects differing from another -
we able load multiple collada files using code below, want know how able name collada files differently.
here of functions used:
function loadfiles(){ urls.push('./model/e1.dae'); urls.push('./model/e2.dae'); urls.push('./model/e3.dae'); urls.push('./model/e4.dae'); urls.push('./model/e5.dae'); for(var =0; i<urls.length; i+=1) { var loader = new three.colladaloader(); loader.options.convertupaxis = true; loader.load(urls[i], function(collada) { var object = collada.scene; object.updatematrix(); object.position.x = math.random()*500-200; object.position.y = math.random()*200-100; object.scale.x = object.scale.y = object.scale.z = 2; object.rotation.y -= (90)*(math.pi/180); object.rotation.x = (90)*(math.pi/180); object.position.z = 10; scene.add(object); renderer.render(scene, camera); }); } } function ondocumentmousedown( event ){ event.preventdefault(); tointersect = []; scene.traverse(function (child) { if (child instanceof three.mesh) { tointersect.push(child); } }); raycaster = projector.pickingray( mouse2d.clone(), camera ); var intersects = raycaster.intersectobjects( tointersect ); alert(intersects[0].object.name); } in loadfile function, put addresses of each of collada files array , load using loop. rendering of file works. not able make alert name and/or id of object if clicked.
instead of releasing different names, of objects rendered alerts "sketchup" when clicked.
renaming using "object.name = "name"" not work either. hope answer question.
i have done similar , it's working me in selecting 1 of collada model , getting it's name , id using raycaster. (there multiple collada models rendered in scene).
here snippet of code , steps working me :
- create new directionvector object global variable.
var directionvector = new three.vector3();
- create new mouse, raycaster, , projector object global variables.
var mouse = new three.vector2(); var raycaster = new three.raycaster(); var projector = new three.projector();
create ondocumentmousemove event function , attach collada model container (the dom renderer.domelement placed) after collada models 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 collada model container (the dom renderer.domelement placed).
when container clicked, call 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); } }}
Comments
Post a Comment