2015-02-04 3 views
1

Я хочу получить имя объекта, на который я нажал. Модель загружается в сцену с помощью ColladaLoader.js. Моя проблема: я просто получаю объект THREE.Mesh, но мне нужен объект THREE.Object3D, потому что Mesh не содержит имя.Three.js raycast THREE.Object3D

Если я использую следующий код:

scene.traverse (function (object){ 
    console.log(object); 
}); 

я получаю:

THREE.Object3D {uuid: "085928DC-5493-4C57-B142-51D2A95F27B6", name: "Schraube_M4x16_002", type: "Object3D", parent: THREE.Object3D, children: Array[1]…} 
THREE.Mesh {uuid: "1AD3D989-CEB7-4B89-BE88-6D58C1C24AD6", name: "", type: "Mesh", parent: THREE.Object3D, children: Array[0]…} 

Object3D имеет имя сетки нет. Но Raycast только возвращает сетки. Как это исправить?

+0

Добавить имя в свою сетку. – gaitat

+0

Но как назначить имена collada для каждой сетки. Моя модель Collada содержит много детей. – Servus7

+1

Если вы пересечете дерево из своей сетки, вы попадете в Object3D. В противном случае вам придется изменить ColladaLoader. – gaitat

ответ

1

Я, наконец, модифицировал ColladaLoader и добавил имя узла в сетку.

function createSceneGraph(node, parent) { 
    ... 
    // geometries 
    ... 
    } else { 
     if (geom.isLineStrip === true) { 
      mesh = new THREE.Line (geom); 
     } else { 
      mesh = new THREE.Mesh (geom, material); 
     } 
     mesh.name = node.name; 
    } 
    ... 
}