ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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
Designed by Tistory.