Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Object 命名多个不同于另一个的collada对象_Object_Three.js_Webgl_Collada - Fatal编程技术网

Object 命名多个不同于另一个的collada对象

Object 命名多个不同于另一个的collada对象,object,three.js,webgl,collada,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'

我们目前可以使用下面的代码加载多个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);
}
函数加载文件(){
url.push('./model/e1.dae');
url.push('./model/e2.dae');
url.push('./model/e3.dae');
url.push('./model/e4.dae');
url.push('./model/e5.dae');

对于(var i=0;i就在
var object=collada.scene;
之后,您可以说
object.name=url[i];
。您可能会遇到范围问题,但您已经明白了。
或者,您可以在Sketchup中进行命名,以使其正确无误。

我也做过类似的工作,它非常适合我选择collada模型之一,并使用raycaster获取其名称和id。(场景中渲染了多个collada模型)

下面是对我有用的代码片段和步骤:

  • 创建新的directionvector对象作为全局变量
var directionVector=new THREE.Vector3()

  • 创建新的鼠标、光线投射器和投影仪对象作为全局变量
  • 在加载collada模型后,创建onDocumentMouseMove事件函数并将其附加到collada模型容器(放置渲染器.doElement的DOM)中

    }

您的_collada_model_container.mousemove(onDocumentMouseMove);

  • 将单击事件附加到collada模型容器(放置渲染器.doElement的DOM)中

  • 单击容器时,调用此函数:

    函数selectColladModel(){

    }


我遇到了同时加载多个Collada型号的问题。您能在这方面帮助我吗
var mouse = new THREE.Vector2();

var raycaster = new THREE.Raycaster();

var projector = new THREE.Projector();
function onDocumentMouseMove( event ) {
          event.preventDefault();
          mouse.x = ( event.clientX / window.innerWidth ) * 2 - 1;
          mouse.y = -( event.clientY / window.innerHeight ) * 2 + 1;
 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);
              }
          }