miniRT
-
[RT] Ray 와 Triangle 의 충돌 판정과제/miniRT 2021. 1. 14. 18:58
3차원 공간상의 세 P1, P2, P3 를 가진 삼각형이 존재한다고 하자. 이 삼각형을 편의상 Tri 라고 하고 Ray = O + td 이고, 해당 점을 P라고 한다면, P와 Tri 같의 충돌판정은 다음 2과정으로 이루어진다. 1. Tri 가 존재하는 평면과 P가 충돌하는가? -> plane 과 Ray의 충돌판정을 활용. 2. P가 Tri 가 있는 평면과 같은 평면에 존재한다면, 해당 P는 Tri 의 세 꼭지점 내부에 있는가? 2번은 판정할 때 외적과 내적을 사용한다. 결론부터 말하자면 ((P3 - P1) X (P - P1)) · ((P2 - P1) X (P - P1)) >= 0 이면 P3 - P1 을 기준으로한 벡터에 대해서 점 P 과 점 P2 가 같은 방향에 있다는 의미이다. 따라서 P2 - P3 를..
-
[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 값을 구하는 것으로..
-
[RT] Ray 와 Plane 의 충돌 판정과제/miniRT 2021. 1. 11. 10:58
그림을 개떡같이 못그렸지만 위의 경우로 충돌판정을 생각해보자. 우선 3차원 좌표계에서 평면이라함은, 끝이 없는 무한히 큰 종이라고 생각하면 된다. 평면을 정의하는 방법으로는 크게 2가지 방법이 있는데 1. 평면의 법선벡터와 평면에 포함되는 임의의 한 점으로 정의 2. 평면에 포함되는 임의의 세 점으로 정의 가 있다. 이중 첫번째 방법으로 위의 평면을 정의한 것이다. 우선 plane 의 임의의 두점을 P0, P1 이라 하면, 벡터(P1 - P0) 는 평면위의 직선벡터가 되고, 이는 당연히 벡터 n과 90도를 이룬다. 따라서 P0를 주어진 하나의 점으로 놓고, P1을 임의의 점(Px, Py, Pz) 라고 놓으면, 평면의 방정식이 아래와 같이 완성된다. 벡터를 이용한 평면 방정식 : n · (P0 - P1) ..