KD 트리 교차 로직은 무엇입니까?


12

KD 트리를 구현하는 방법을 알아 내려고 노력 중입니다.

Ericson 의 "실시간 충돌 감지"페이지 322

Google 도서 미리보기에서 링크를 클릭 할 때 표시되지 않는 경우 텍스트 섹션이 아래에 포함되어 있습니다.

텍스트 섹션

관련 섹션 :

kd 트리와 광선 또는 직선 세그먼트를 교차시키는 기본 개념은 간단합니다. 선은 노드의 분할 평면과 교차하고 교차점의 t 값이 계산됩니다. t가 선 간격 (0 <= t <= tmax) 내에 있으면 선이 평면을 가로 지르고 트리의 두 자식이 재귀 적으로 내립니다. 그렇지 않으면 세그먼트 원점을 포함하는 면만 재귀 적으로 방문합니다.

여기 내가 가진 것 : ( 글자가 보이지 않으면 새 탭에서 이미지 열기 )

영상

논리 트리

div

여기 주황색 광선이 3D 장면을 통과합니다. x는 평면과의 교차점을 나타냅니다. 왼쪽에서 광선이 닿습니다.

  • 장면을 둘러싸는 큐브의 앞면
  • (1) 분할면
  • (2.2) 분할면
  • 장면을 둘러싸는 큐브의 오른쪽

그러나 위의 Ericson의 기본 설명을 순진 히 따르면 다음과 같은 일이 발생합니다.

  • 분할면 (1)에 대해 테스트하십시오. 광선이 분할 평면 (1)에 충돌하므로 분할 평면 (1)의 왼쪽 및 오른쪽 자식이 다음 테스트에 포함됩니다.
  • 분할면 (2.1)에 대해 테스트합니다. Ray는 실제로 그 비행기를 쳐서 (오른쪽으로) 두 자녀 모두 다음 레벨의 테스트에 포함 됩니다. (이것은 반 직관적이므로 최후의 노드 만 후속 테스트에 포함되어서는 안됩니다)

주황색 광선이 장면을 올바르게 통과 할 때 어떤 일이 발생하는지 설명 할 수 있습니까?

답변:


14

정말 간단합니다. 다음과 같은 이유로 분할면 (2.1)에 대한 테스트가 실패해야합니다.

광선이 쪼개지는 평면 (1)에 부딪 치면 "광선을 분리"하거나; t유효한 -range를 설정하고 결과 부분으로 트리를 계속 진행하십시오.

따라서 평면 (2.1)을 확인할 때 평면 (1)의 왼쪽 광선 일부만 평면 (2.1)과 교차하지 않는지 확인해야합니다. 당신의 말은 "멀리 오른쪽에있는 '교차로는있다 t>는 t당신이 비행기 (1)와 광선을 분할 값입니다.

충분히 명확하길 바랍니다.

요약 : 이후의 광선 / 평면 교차는 광선을 해당 평면으로 분할 한 후 남아있는 광선의 부분으로 만 수행해야합니다.


1
으악 !! (훌륭한 대답의 줄임말)
bobobobo 2016

좋은 답변 Torious! GDSE에 오신 것을 환영합니다.
MichaelHouse
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.