2013-04-23 8 views
5

załadowałem model używając OBJLoader, tutaj jest kod do załadowania pliku OBJ:Jak uzyskać pozycję kliknięcia myszką na pliku obj załadowanym z OBJLoader?

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

I próbuję użyć RayCaster znaleźć skrzyżowanie. Zaimplementowałem swój kod z przykładu canvas_interactive_cubes (http://mrdoob.github.io/three.js/examples/canvas_interactive_cubes.html) w pliku three.js. Oto kod, aby znaleźć punkt przecięcia:

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

Niestety nie jestem w stanie uzyskać x, y, z współrzędne punktu przecięcia, bez względu na to gdzie kliknąłem, to zawsze pokazał „Błąd typu: intersects [0 ] jest niezdefiniowany ".

Utknąłem tutaj przez kilka dni. Czy ktoś może mi powiedzieć, jak zdobyć skrzyżowanie na załadowanym pliku obj? Doceniam twoją pomoc.

Odpowiedz

8

spróbuj dodać rekurencyjnej flagę tak:

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

Three.js r.58

+0

WOW, to działa ... to tak łatwo. Wygląda na to, że zadałem głupie pytanie. I zajmuje dużo czasu, aby znaleźć skrzyżowanie na dużym pliku obj. Wielkie dzięki za odpowiedź !! – user2309002

+0

Spędziłem 2 godziny na tym. Dodaj ', true' i to działa. Nigdy nie widziałem tego na kilku przykładach, które studiowałem. Dzięki ! –