наименование нескольких объектов коллады, отличающихся от другого

в настоящее время мы можем загружать несколько файлов 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 в массив и загружаем его с помощью цикла. Рендеринг файла работает. Но мы не можем заставить его оповещать имя и/или идентификатор объекта, если он был нажат.

Вместо того, чтобы выпускать разные имена, все объекты отображали предупреждения «SketchUp» при нажатии.

Переименование с использованием "object.name="name"" тоже не работает. Мы надеемся, что вы смогли ответить на этот вопрос.


person Michrane    schedule 14.05.2013    source источник
comment
У меня возникла проблема с одновременной загрузкой нескольких моделей Collada. не могли бы вы помочь мне в этом отношении   -  person Najam-us-Saqib    schedule 15.05.2013


Ответы (2)


Я сделал что-то подобное, и он отлично работает для меня при выборе одной из моделей коллады и получении ее имени и идентификатора с помощью raycaster. (В сцене визуализируется несколько моделей коллады).

Вот фрагмент кода и шаги, которые работают для меня:

  • Создайте новый объект directionvector как глобальную переменную.

var directionVector = новый THREE.Vector3();

  • Создайте новую мышь, raycaster и проектор как глобальные переменные.
var mouse = new THREE.Vector2();

var raycaster = new THREE.Raycaster();

var projector = new THREE.Projector();
  • Создайте функцию события onDocumentMouseMove и прикрепите ее к контейнеру модели коллады (DOM, где размещен ваш renderer.domElement) после загрузки моделей коллады.

    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 );

  • Прикрепите событие по клику к контейнеру модели коллады (DOM, в котором размещен ваш renderer.domElement).

  • Когда ваш контейнер щелкнут, вызовите эту функцию:

    функция 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);
                  }
              } 
    

    }

person Ratih Nurmalasari    schedule 11.12.2013

Сразу после var object = collada.scene; можно сказать object.name = urls[i];. У вас может быть проблема с масштабом, но вы поняли идею. Или же вы можете присвоить имена в Sketchup, чтобы они выглядели правильно.

person gaitat    schedule 14.05.2013