-
[RT] Ray 와 Cylinder 의 충돌판정과제/miniRT 2021. 1. 13. 22:23
P2 -> Ray 의 충돌지점
따라서 P2 = O + td 가 된다. 여기서 O는 ray가 출발한 위치, d 는 unit_vector 로, ray의 방향이 된다.
이때 실린더 내부 중앙선에 존재하는 임의의 점 P1을 잡고,
실린더 아래 disk 의 센터 지점을 C라 놓으면,
P1 = C + hn 이 된다. 이때 n은 실린더 위 disk 의 법선벡터 이다.
이러면 미지수가 2개가 되는데, h 와 t 이다.
우리가 구하고 싶은 것은 t 이므로
(P2 - C) · n = h 이므로 이를 이용하여 t를 h에 대해서 정리 할 수 있다.
또한
| P2 - P1 |^2 = R^2 이므로, 이를 이용하여 t를 구할 수 있다.
결국 2차원 방정식
ax^2 + bx + c = 0 이라는 식에 a,b,c 값을 구하는 것으로 귀결되는데 모두 정리해보면
a = A · A
b = 2A · B
c = B · B - R^2
이 된다. A, B, R 은 아래와 같다.
A = d - (n · d)n
B = O - C - (O · n)n + (C · n)n
R = disk 의 반지름
이를 통해 해의 존재 유무를 판별하고, t를 알아내며,
이후 h를 계산하여 0 <= h <= 실린더 높이로 실린더를 판별 할 수 있다.
'과제 > miniRT' 카테고리의 다른 글
[RT] Ray 와 Triangle 의 충돌 판정 (0) 2021.01.14 [RT] Ray 와 Plane 의 충돌 판정 (0) 2021.01.11