2013-07-04 2 views
0

나는 이것이 xyplane을받을 수있는 확인 방법이라고 생각 주어진 xy 평면에 캔버스의 좌상의 좌표를 찾기 (이 잘못 또는 더 나은 방법이 있는지를 알려주세요) :카메라

xyplane = new THREE.Plane().setFromCoplanarPoints(
     new THREE.Vector3(0, 0, 0), 
     new THREE.Vector3(10, 15, 0), 
     new THREE.Vector3(100, -90, 0), 
    ); 

나는 원산지를보고 (0, 0, 1000)에있는 카메라를 가지고 있습니다. 나는 그 내보기 포트의 왼쪽 정확한 상단 좌표 찾을 수 있습니다

projector = new THREE.Projector(); 
    topleft = new THREE.Vector3(-1, 1, 0); 
    through = projector.unprojectVector(topleft, camera); 

through 다음 캔버스의 좌상에 완벽하다 THREE.Vector3 {x: -31.425217496422327, y: 22.169468302342334, z: 900.0000201165681}이다. 그러나, 나는 z = 0 인 등가 지점을 찾고 싶다. 나는 이것을 광선으로 시도한다. 그러나 나는 실패한다.

ray = new THREE.Ray(camera.position, through); 
    point = ray.intersectPlane(xyplane); 

point 근처에도하지 않은 다음 {x: 34.91690754890442, y: -24.632742007573448, z: 0}이다. 나는 기본적인 것을 오해하고있다. 나는 이것을 알아 내려고 노력하면서 Coordinates of intersection between Ray and Plane과 다른 것을 공부할 것이다. 어쩌면 평범한 언어로 설명 할 수 있습니다.

+1

당신은 거의있다. THREE.Ray()의 두 번째 인수는 카메라에서 목표 지점을 가리키는 단위 길이의 방향 벡터 여야합니다. – WestLangley

+0

Thanks @WestLangley, 귀하의 의견은 분명히 밝혔습니다. –

답변

0

@WestLangley에게 감사의 말을 전하며 감사드립니다. through 변수는 Ray 생성자에 대한 올바른 두 번째 인수가 아닙니다. 방향에 단위 벡터가 필요합니다. 카메라의 위치와 through 점으로, 우리는와 방향 벡터를 얻을 수 있습니다 :

direction = through.sub(camera.position).normalize(); 

그런 다음 나머지는 예상대로 작동합니다

ray = new THREE.Ray(camera.position, direction); 
    p = ray.intersectPlane(xyplane);