그래픽스 광추적기(레이 트레이싱)를 만들면서 공부하게 되었다.

선과 구는 세가지 충돌관계를 가질 수 있다.
1. 충돌하지 않거나, 2. 선이 구의 가장자리에 닿아 한 점에만 접하거나, 3. 선이 구를 관통해 두 점과 겹치는 경우이다.

첫번째 식은 구의 방정식이고 두번째 식은 직선을 표현한다.
직선에서 x는 구와 직선이 겹친 점, o는 직선의 시작점,
d는 시작점부터 x까지의 거리, u는 직선의 방향벡터이다.

x = o + du를 구의 방정식의 x에 대입하고 d에 대해 정리하면 d에 대한 2차방정식이 만들어진다.
그리고 근의 공식을 이용해서 d의 값을 알아내고, 직선과 구의 충돌관계를 알아낼 수 있다.

복잡한 근의 공식을 다 풀 필요없이 역삼각형으로 되어있는 나블라라는 것의 식에 값을 대입해보면 된다.
나블라가 0보다 작다면 충돌하지 않은 것, 0이면 한점만 접한 경우 , 0보다 크면 구를 관통해 두 점과 겹친 것이다.
d는 직선의 시작점으로부터 원에 충돌한점까지의 거리이다. 구를 관통하면 두 점과 겹치므로 +-로 값이 두개 있다.
d를 구하면 x= o + du에 d를 대입해 원과 직선이 충돌한 점의 좌표까지 알 수 있다.
'그래픽스' 카테고리의 다른 글
| [그래픽스] 무게중심 좌표계 (0) | 2023.05.16 |
|---|---|
| [그래픽스] 직선과 삼각형의 충돌 (0) | 2023.05.15 |
| [그래픽스] Kernel, Convolution, Gaussian Blur (0) | 2023.05.10 |
| [DX12] Animation (0) | 2022.08.01 |
| [DX12] Picking (0) | 2022.07.31 |