2012-10-05 9 views
5

Mam promień i płaszczyznę. Promień przecina płaszczyznę i chciałbym wiedzieć gdzie. Jak uzyskać współrzędne światowe tego układu?Współrzędne przecięcia między promieniem a płaszczyzną

(moim przypadku ja unproject współrzędne ekranu do kamery i stworzyć ray. Samolot jest podstawą sceny)

var vector = new THREE.Vector3(mousePosition.x, mousePosition.y, 1); 
projector.unprojectVector(vector, camera); 
var ray = new THREE.Ray(
    camera.position, 
    vector.subSelf(camera.position).normalize() 
); 
+0

w ostatnich README na trzy .. „* Zmieniono nazwę' Vector */Matrix */Kwaterniony '' 'addSelf()/subSelf()/crossSelf() ...' to 'add()/sub()/cross() ...'. " –

Odpowiedz

9

Jest to zwykły wzór. Być może będziesz musiał dostosować go do swojej konkretnej sytuacji.

var raycaster = new THREE.Raycaster(); // create once and reuse 
var mouse = new THREE.Vector2(); // create once and reuse 

... 

mouse.x = (event.clientX/renderer.domElement.clientWidth) * 2 - 1; 
mouse.y = - (event.clientY/renderer.domElement.clientHeight) * 2 + 1; 

raycaster.setFromCamera(mouse, camera); 

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

if (intersects.length > 0) { 

    console.log(intersects[ 0 ].point;); 

} 

Tutaj, objects jest tablicą. Na przykład,

var objects = []; 

objects.push(plane_mesh); 

EDIT: Aktualizacja dla Three.js r.84

+1

Och, istnieje atrybut o nazwie "punkt". To łatwe ... dziękuję :) –

+0

Dziękujemy za aktualizację dla r58. Próbuję uzyskać lokalizację w płaszczyźnie (nowa TRZY. Samolotowa geometria (400, 400, 10, 10)) za pomocą funkcji worldToLocal, ale współrzędne wydają się być zepsute, X wydaje się mieć odpowiedni zakres (- 200 do 200), ale Y wydaje się być trochę krótka. Czy to normalnie tak się dzieje? –

+0

@drakej Będziesz musiał wysłać nowe pytanie. Pamiętaj o podaniu swojego kodu. – WestLangley

0

As z R55, można użyć tego skrótu. Jest podobny, ale upraszcza rozpalanie do punktu, w którym nawet nie musisz się martwić o unprojectVector().

Oto zmodyfikowana wersja przykład WestLangley za:

var vector = new THREE.Vector3(( 
     event.clientX/window.innerWidth) * 2 - 1, 
     - (event.clientY/window.innerHeight) * 2 + 1, 
     0.5 
    ); 

    var ray = projector.pickingRay(vector.clone(), camera); 

    var intersects = ray.intersectObjects(objects); 

    if (intersects.length > 0) { 

     console.log(intersects[ 0 ].point;); 

    } 

Zakłada samych obiektów tablicę

var objects = []; 

objects.push(plane_mesh); 
Powiązane problemy