본문 바로가기
3D Algorithm

직선 삼각형 교차점 계산(Ray Triangle Intersection)

by DarkRock 2024. 3. 21.
반응형

 

출처:scratchapixel.com

 

그림기호 설명

tn: triangle normal
rd: ray direction
p: hit point
ro: ray origin

v0, v1, v2: triangle vertex

 

위 그림에서 ray origin으로부터 ray direction의 최단거리 t는

t = ((v0 - ro) • tn) / (rd • tn)                    •는 내적
로 구할 수 있습니다. t가 구해지면 hit point p는
p = ro + rd * t 
로 구할 수 있습니다. 단순히 교차점만 구하면 계산은 여기서 끝이 나지만,
삼각형과 직선 ray가 교차하는지 판별을 위해서는 hit point가 삼각형 안에 있는지 판별이 필요합니다. 판별은 외적을 이용해서 할 수 있습니다.

 

출처:scratchapixel.com


k1 = (v1-v0) x (p-v0)                              x는 외적
k2 = (v2-v1) x (p-v1)     
k3 = (v0-v2) x (p-v2)     

k1, k2, k3 모두 벡터인데 이 벡터는 triangle normal과 내적해서 모두 0보다 크게 나와야 점 p가 삼각형 안에 있는 점이고, 한 개라도 내적 값이 0보다 작게 나오면 p는 삼각형 밖에 있는 점이라서 직선 ray는 삼각형과 교차하지 않게 됩니다. 이와 같이 외적은 아래글 CCW을 판별할 때도 사용했었습니다.

2023.11.13 - [3D Algorithm] - CCW 판별 알고리즘(Counter Clockwise)

 

CCW 판별 알고리즘(Counter Clockwise)

CCW은 Counter Clockwise의 줄임말이며, 우리말로 반시계방향을 의미합니다. 아래의 그림을 봤을 때 우리는 간단히 반시계방향 회전이라고 판단할 수 있습니다. 2차원에서 이미지를 정면으로 봤을 때

darkrock.tistory.com

 

반응형