이 글은 http://www.lighthouse3d.com/opengl/maths/index.php?raytriint의 글을 통해 재구성한 글로, 변역하면서 쉽게 이해할 수 있도록 내용을 약간 수정했습니다.
매개변수방정식의 형태로 편선(시작점에서 어떤 방향으로 무한하게 진행하는 선, Ray)과 삼각형의 폴리곤이 주어질때.. 이 둘이 교차하는가를 판단하는 방법에 대해 증명은 생략하고 그 방법에 대해서 알아 보겠습니다.
삼각형을 구성하는 점은 다음처럼 정의할 수 있습니다.
삼각형의 구성 점(u,v) = (1-u-v)*p0 + u*p1 + v*p2 여기서, p0, p1, p2는 삼각형 위의 이미 알고 있는 점, u >= 0, v >= 0, u + v <= 1.0
그리고 편선에 대한 매개변수방정식을 다음처럼 정의할 수 있습니다.
편선의 구성 점(t) = p + t * d 여기서, p는 편선의 시작점으로 이미 알고 있는 점, d는 편선의 방향 벡터 이제 편선과 삼각형의 교점은 삼각형의 구성 점(u,v) = 편선의 구성 점(t) 로부터 다음과 같습니다.
p + t * d = (1-u-v) * p0 + u*p1 + v*p2 결국... 교차 여부는 세 값(t, u, v)가 위의 공식을 만족하고 u와 v가 앞서 정의한 조건을 만족하면 교차하는 경우이다. 이런 수학적인 논의는 다음으로 미루기로 하고.... 여러분이 원하는 C 코드로 대신합니다.
vector 함수는 두개의 좌표로부터 백터를 만드는 함수이고 innerProduct와 crossProduct는 내적과 외적을 구하는 함수입니다.
|
김형준(Dip2K)
2009/02/11 21:09
2009/02/11 21:09