2010-02-05 4 views
1

처리 할 때 간단한 3D 끌어서 놓기 인터페이스를 구축하고 마우스가 개체 위로 굴릴 때를 감지하려고합니다. 나는 스크린 공간 등으로 그들을 얻기 위해 3D 모델 좌표에 몇 가지 행렬 변환을해야한다고 상상할 것이다 ...마우스 X와 Y를 3D 모델 좌표로 변환

나는이 작업의 간단한 버전을 가지고 있는데, 카메라가 움직일 때 문제가있다. 그 장면은 내가 엮어내는 좌표에 달려있다.

그래서 화면 x & 화면 Y가 제대로 작동하지 않기 때문에 타일 좌표를 화면 공간으로 어떻게 변환합니까?

업데이트 : 결국이 작업을 수행하는 방법에 대한 처리 사이트에서이 개 사례를 발견 . villintehaspam에 감사드립니다.

http://processing.org/hacks/hacks:picking

+0

3 차원 개체의 2 차원 투영을 보려면 3 차원 좌표를 특정 2 차원 투영 (화면 좌표)으로 변환해야합니다. 문제는이 변환에 손실이 포함되므로 프로세스를 되돌리고 3D 점을 얻을 수 없다는 것입니다. 광선을 뒤로 투영하고 광선이 교차하는 모든 물체를 찾고 Z 순서로 정렬해야합니다. –

답변

3

이 문제는 따기라고합니다. 마우스 피킹을 검색하면 수많은 히트가 발생합니다. 마우스 클릭에서

  1. 가져 오기 X, Y 좌표 :

    기본 이론이있다.

  2. 는 X, Y, 이러한 변환 Z (즉 -1 < = X < = 1, -1 < = Y < = 1, Z = 니어/클립 거리가 정규 투영 경우) 눈 좌표로 좌표 .
  3. 세계 좌표를 얻기 위해이 좌표를 투영 행렬의 역수로 변환하십시오.
  4. 이제 카메라 위치의 광선이 방금 세계 좌표 방향을 향하게됩니다.
  5. 고려할 개체와 광선 - 개체 교차 테스트를 수행합니다. 광선 원점 (카메라 위치)에 가장 가까운 광선과 교차하는 물체를 선택하십시오.
+0

고마워요. 이것에 대한 코드가 이미 있음이 드러났습니다 (놀랍지 않게도). 나는 그것을 찾지 못했습니다. 올바른 검색어가 도움이되었습니다. –