2013-04-23 9 views
5

ho caricato il modello utilizzando OBJLoader, ecco il codice per il caricamento del file obj:Come ottenere il clic del mouse su un file obj caricato da OBJLoader?

 var loader = new THREE.OBJLoader(); 
     loader.load('obj/teeth/teeth4_5.obj', function(object) { 
      model = object; 
      scene.add(model); 
      objects.push(model); 
     }); 

E sto cercando di utilizzare raycaster per trovare l'intersezione. Ho implementato il mio codice dall'esempio canvas_interactive_cubes (http://mrdoob.github.io/three.js/examples/canvas_interactive_cubes.html) in three.js. Ecco il codice per trovare l'intersezione:

function onDocumentMouseDown(event){ 
     event.preventDefault(); 
     var mouseX = (event.clientX/window.innerWidth)*2-1; 
     var mouseY = -(event.clientY /window.innerHeight)*2+1; 
     var vector = new THREE.Vector3(mouseX, mouseY, 0.5); 
     projector.unprojectVector(vector, camera); 
     var raycaster = new THREE.Raycaster(camera.position, vector.sub(camera.position).normalize()); 
     var intersects = raycaster.intersectObjects(scene.children); 
     console.log(intersects[0].point); 
    } 

Purtroppo io non sono in grado di ottenere la x, y, z le coordinate del punto di intersezione, non importa dove ho cliccato, è sempre mostrato "TypeError: interseca [0 ] non è definito ".

Sono bloccato qui per diversi giorni. Qualcuno può dirmi un modo per ottenere l'intersezione su un file obj caricato? Apprezzo il vostro aiuto.

risposta

8

Prova ad aggiungere il flag ricorsivo in questo modo:

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

Three.js r.58

+0

WOW, funziona ... che è così facile. Sembra che ho fatto una domanda stupida. E ci vuole molto tempo per trovare un'intersezione su un grande file obj. Grazie mille per la tua risposta!! – user2309002

+0

Ho passato 2 ore a questo. Aggiungi ', true' e funziona. Non l'ho mai visto su diversi esempi che ho studiato. Grazie ! –