命名多个collada对象与另一个不同

时间:2013-05-14 07:57:20

标签: object three.js webgl collada

我们目前能够使用下面的代码加载多个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“”重命名也不起作用。我们希望你能回答这个问题。

2 个答案:

答案 0 :(得分:1)

我做了类似的事情,它在我选择一个collada模型并使用raycaster获取它的名字和id时非常适合我。 (在场景中渲染了多个collada模型)。

以下是适合我的代码和步骤:

  • 将新的directionvector对象创建为全局变量。
  

var directionVector = new THREE.Vector3();

  • 将全新鼠标,raycaster和投影仪对象创建为全局变量。
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中进行命名,这样就可以了。