오브젝트 충돌 상태를 구하기 위해 직선과 평면의 방정식등의 기하학을 이용합니다. 벡터를 기본으로 하여 직선 및 평면의 방정식을 표현하는 법을 알아보고, 이런 직선과 평면의 교차 관계를 이용해 게임상의 충돌 알고리즘을 구현할 수 있습니다. 이를 위해서는 기하학의 기본이 되는 직선, 평면의 기하 요소들을 정확히 이해하고 그 교차 관계를 계산하는 법을 아는 것이 중요합니다.
광선추적에 관련된 강의를 이해하기 위해서 기본적인 기하학은 꼭 알고 있어야 합니다.
직선의 방정식의 정의
고등학교에서 배우는 직선의 방정식을 기본으로 벡터 형태의 방정식을 사용하는 법을 익히도록 합니다. 게임에서는 벡터형태로 된 방정식을 사용합니다.
공간 속의 점 P를 지나고, 방향이 v인 직선의 방정식
여기서 매개변수(parameter) t의 범위에 따라 반직선, 유한 직선으로 직선의 방정식이 정의됩니다.
t의 범위에 따라 반직선, 유한직선으로 직선의 방정식이 정의됩니다.
t=0인경우는 점 P를 나타냅니다.
두 점이 주어진 경우의 방정식
0≤t≤1일 경우 이 직선은 시작점을 P0로 하고 끝점을,P1으로 하는 유한직선
※t가 0인경우 P0가 되고 t가 1인경우 P1이 되므로 이 직선은 P0를 시작점으로하고, 끝점을 P1으로 하는 유한 직선이 됩니다.
ex) (1,2,3),(4,5,6)을 지나는 직선의 방정식을 구하면?
(4,5,6)-(1,2,3) = (3,3,3)
직선의 방정식은
(x,y,z) = (1,2,3)+t(3,3,3)
위 직선과 방향벡터를 단위벡터로 표현하면
(x,y,z) = (1,2,3)+t'(1/√3,1/√3,1/√3)
0≤t≤1인 유한직선이 된다면 단위벡터로 표현한 t'는 0≤t'≤3/3√3 이 됩니다.
※직선의 방정식에 사용되는 벡터는 방향벡터입니다.
직선과 직선의 교차
이 식을 정리하여 t,t'값이 0과 1사이라면 유한직선이 교차하는 것으로 판단.
※게임 개발에서 직선과 직선의 교차를 사용할 경우가 많습니다. 2D게임을 개발할 때, 직사각형이 아닌 마름모 등 특정하지 않은 모양의 사각형과 사각형의 충돌에서 직선의 교차를 이용할 수 있습니다.
사각형의 모든 변들에 대해 유한 직선의 방정식을 만들고 각 직선들이 서로 교차하는지 검사하면 사각형 충돌을 알아낼 수 있습니다.
문제) (2,1),(1,3)을 지나는 유한 직선과 (1,1),(2,2)를 지나는 유한 직선이 교차하는지 판단하고, 교차한다면 그 교점을 구하시오
평면의 방정식
평면의 방정식의 정의
한 점 P를 포함하고 법선 벡터 n을 갖는 평면의 방정식
평면의 방정식
공간상에 세 점이 주어질 경우
세 점으로부터 정의된 평면
공간상 세 점이 주어질 경우 평면이 정의될 수 있습니다. 세 점을 이용해 평면상의 두 벡터를 구하고 두 벡터를 외적하면 두 벡터 모두에 수직인 법선벡터를 구할 수 있습니다. 3D게임에서 폴리곤을 사용할 때 보통 세 점을 이용합니다. 세점을 이용하는 방법은 매우 빈번히 사용되기 때문에 꼭 익혀 놓아야 합니다.
문제) (1,1,1),(-1,3,2),(2,1,2)가 이루는 평면의 법선벡터를 구하시오.
직선과 평면의 교차관계
게임에서 사용되는 충돌 알고리즘에서 직선과 평면의 교차관계는 매우 빈번하게 사용됩니다. 충돌알고리즘에 사용되는데, 예를들어 발사된 오브젝트가 어떤 오브젝트를 둘러싸고있는 평면과의 충돌관계(발사된 오브젝트의 직선의 방정식과 충돌할 오브젝트의 평면의 방정식에 대해 교차관계를 계산하면 어떤 오브젝트와 충돌한지 검사할 수 있습니다.
여기서 한 평면과 직선의 교차 관계 계산은 3가지 단계를 거칩니다.
첫 번째 단계
0이 되는 경우 교점이 없는 것으로 판단 직선과 평면은 교차하지 않는 것으로 판단
0이 아닌 경우 두 번째 단계로 넘어간다.
두 번째 단계(교점의 계산)
교점을 계산하기 위해서 직선의 방정식을 평면의 방정식에 대입하여 매개변수 t를 구합니다.
t를 직선의 방정식에 대입하면 교점의 좌표가 계산됩니다.
세 번째 단계 (직선과 평면의 교차 관계)
유한 직선과 유한 평면(폴리곤)의 교차 여부 판단
게임상에서의 충돌은 대부분 유한 직선, 유한 평면을 통해 이루어집니다. 실제 오브젝트를 구성하는 평면은 오브젝트 자체의 크기가 존재하기 때문에 유한 평면으로 구성됩니다. 물체의 궤적 같은 직선의 방정식 또한 시작점과 끝점이 있는 유한 직선으로 이루어지므로 단순히 교점을 구했다고 해서 충돌이 일어났다고 단정지을 수 없습니다.
교점이 유한 직선 안에 포함되어 있는지 유한 평면안에 포함되어 있는지 판단해야 합니다. 이 부분은 광선의 추적에서 다루게 됩니다.
점과 직선, 직선과 직선 사이의 최단거리
게임에서는 마우스로 모니터의 한 곳을 클릭했을 때, 해당 위치에서 가장 가까운 오브젝트를 얻어오기 위해 점과 직선의 최단거리 계산이 유용하게 사용됩니다.
3차원 공간에서 직선과 직선 사이의 거리는 유용하게 사용됩니다. 벡터의 내적과 직선의 방정식을 이용하여 이를 구할 수 있습니다.
위 두직선 사이의 최단거리는 두 직선 모두에게 수직인 벡터의 길이입니다.
출처 - 한국콘텐츠진흥원