我们目前能够使用下面的代码加载多个collada文件,我们想知道我们如何能够以不同的方式命名collada文件。
以下是我们使用的一些功能:
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 i =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);
}
在loadfile函数中,我们将每个collada文件的地址放入一个数组中并使用循环加载它。文件的渲染工作。但是,如果单击该对象,我们无法使其警告对象的名称和/或ID。
单击时,所有呈现的对象都会发出警告“SketchUp”,而不是发布不同的名称。
使用“object.name =”name“”重命名也不起作用。我们希望你能回答这个问题。
答案 0 :(得分:1)
我做了类似的事情,它在我选择一个collada模型并使用raycaster获取它的名字和id时非常适合我。 (在场景中渲染了多个collada模型)。
以下是适合我的代码和步骤:
var directionVector = new THREE.Vector3();
var mouse = new THREE.Vector2(); var raycaster = new THREE.Raycaster(); var projector = new THREE.Projector();
创建onDocumentMouseMove事件函数,并在加载collada模型后将其附加到collada模型容器(放置 renderer.domElement 的DOM)中。
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 );
将点击事件附加到您的collada模型容器(放置 renderer.domElement 的DOM)。
单击容器时,请调用此函数:
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); } }
}
答案 1 :(得分:0)
在var object = collada.scene;
之后,你可以说object.name = urls[i];
。您可能有范围问题,但您明白了。
或者你可以在Sketchup中进行命名,这样就可以了。