2014-03-06 51 views
1

當我們用OBJMTLLoader加載Object3D時,不可能使用raycaster用鼠標選擇這個對象。交集數組長度始終爲0.任何人都知道原因?下面是代碼...通過OBJMTLLoader加載Object3D

裝載機日常

  var loader2 = new THREE.OBJMTLLoader(); 
     loader2.load('/assets/unwrap/masa/dogtasmasa.obj', '/assets/unwrap/masa/dogtasmasa.mtl', function (object) { 
      object.position.y = 1.5; 
      object.position.x = 0; 
      object.position.z = 2; 
      object.rotateX(-Math.PI/2); 
      object.rotateZ(-Math.PI/2); 
      object.scale.set(0.04, 0.04, 0.04); 
      object.castShadow = true; 
      scene.add(object); 
     }); 

和採摘

 function onDocumentMouseDown(event) { 

     event.preventDefault(); 

     SCREEN_WIDTH = window.innerWidth - 5; 
     SCREEN_HEIGHT = window.innerHeight - 5; 

     var vector = new THREE.Vector3((event.clientX/SCREEN_WIDTH) * 2 - 1, -(event.clientY/SCREEN_HEIGHT) * 2 + 1, 0.5); 
     projector.unprojectVector(vector, camera); 
     var raycaster = new THREE.Raycaster(camera.position, vector.sub(camera.position).normalize()); 
     var intersects = raycaster.intersectObjects(scene.children); 


     if (intersects.length > 0) { 
      for (var i = 0; i < intersects.length; i++) { 
       var obj = intersects[i].object; 
        controls.enabled = false; 
        tControls.attach(); 
      } 
     } 
     else { 
      controls.enabled = true; 
      tControls.detach(); 
     } 
    } 

場景是整個瀏覽器窗口。通過三種塗蠟任何其他網可以採摘,但object3d不是......

感謝各種幫助

回答

1

添加遞歸標誌,像這樣:

var intersects = raycaster.intersectObjects(objects, true); 

three.js所河66

+0

我試過了,當我使用resursive標誌時,十字路口是由很多對象組成的,但我需要創建一個邊界框幫助程序來顯示選擇哪個對象。 object3d的子網格在那裏有一個邊界框。我需要在加載的組周圍創建一個邊框幫助器。例如,對象是我的場景是一個沙發,但沙發不能被全部選中。 – Tezcan

+0

以下是three.js中如何處理這種情況:在加載程序回調中,需要向每個子對象添加一個指向根對象,就像這樣:'child.userData.rootObject = object;'。 – WestLangley

+0

我怎麼無法想到這個?把根源給孩子是...... – Tezcan