
: 광선을 쏘아 광선이 어떤 물체와 충돌했는지 확인하는 방법

위와 같이 평면위에 점 V0이 있고 Ray의 시작점인 S, Ray의 방향인 D, 평면과 교차점인 P가 있다고 생각했을 때, V0-S 벡터를 평면의 Normal 벡터로 내적시키면

위와 같은 삼각형의 세로변의 길이가 결과로 나오게 된다. 이를 a라고 하자.
마찬가지로 방향벡터인 D를 Normal로 내적하게 되면

위와 같이 노란색 삼각형이 만들어지고 내적의 결과는 b가 된다.

우리가 구하고 싶은건 위 그림의 x의 값이다.

전체를 포함하는 커다란 보라색 삼각형을 그려보면 노란색삼각형과 두 각을 공유하므로 닮음이라는 것을 알수 있다.
두 삼각형의 닮은 비는 b:a 인걸 알수 있는데, 이를 이용하면 D가 길이가 1인 벡터이므로 S지점 + D벡터 * a/b를 하면 P(평면과 Ray의 교차점)의 월드 좌표를 구할 수 있다.

위의 같은 상황에서 점 P가 삼각형 내부에 있는지 알기위해서는 각 변에 대하여 외적을 하여, 변의 위에 있는지 아래있는지 구분해야한다.

이렇게 벡터를 두개 만들어 두 벡터를 외적했을 때, V1-P Cross V1-V2의 결과는 P의 위치에 따라 양수가 나오거나 음수가 나올 수 있다. 이렇게 한 변을 기준으로 안쪽인지 바깥쪽인지를 구분할 수 있다.
이를 이용해서 세변에 대해 외적을 계산하고 외적의 결과와 평면의 노멀벡터를 내적하였을때 0보다 크다면 점 P가 삼각형 내부에 있다는걸 알 수 있다.