본문 바로가기

그래픽스

[그래픽스] 선과 구의 충돌

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

 

위키피디아

 

선과 구는 세가지 충돌관계를 가질 수 있다.

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