본문 바로가기
기타 개발 관련/3D 그래픽스

그래픽스 - 동차 좌표계와 투영행렬

by 번데기 개발자 2018. 7. 16.
반응형



동차 좌표계란?


(x, y) 를 (x, y, 1)로 표현하는 것을 말합니다.

일반적으로 말해 임의의 0이 아닌 상수 w에 대해 (x,y)를 (wx, wy, w)로 표현하는 것입니다.


동차 좌표계를 사용하면 affine변환이나 perspective변환을 하나의 단일 행렬로 표현 할 수 있습니다.


projective geometry에서 사용하는 좌표계가 동차 좌표이며 다른말로 projective좌표 라고 합니다.



투영행렬과 동차좌표의 관계


투영행렬에서, 카메라 공간상에 존재하는 점과 카메라 위치 사이의 깊이값(z)를 최종 결과점의 x,y,z에 각각 곱해지고, w에 저장됩니다.

바로 이 과정이 동차좌표계를 위한 과정입니다.

좌표공간에서의 3d좌표를 얻어내려면 w로 나눠내면 됩니다.

여기서 월드공간 카메라 공간에서는 w값이 항상 1이기 때문에 아무런 변화가 없습니다.

그렇지만 투영공간에서는 w값이 카메라 공간에서의 카메라의 위치에서 부터 정점 사이의 거리이기 때문에 z값에 따라 정점의 위치와 크기가 변환됩니다.

따라서 쉐이더에서 다른공간은 상관없지만, 투영공간상에 존재하는 좌표를 다를 경우 동차 좌표계상에서 존재하기 때문에 w성분으로 나눠줘야 합니다.






동차좌표의 표현


실제로 OpenGL과 같은 그래픽 라이브러리에서 4x4의 3차원 좌표행렬을 4개의 수로 줄여서 표현합니다.

예를 들어 (x, y, z, w)로 표현되며 각각 x, y, z 좌표와 점인지 선인지 표현하는 w로 이루어진 동차좌표를 사용합니다.


1차원 점 : (x, 0, 0, 1)

2차원 점 : (x, y,  0, 1)

3차원 벡터 : (x, y, z, 0)

이런식으로 표현할 수 있습니다.




동차 좌표를 사용하는 이유?


동차좌표를 사용하는 이유는 시점으로 부터의 방향이 중요하기 때문입니다.

즉 OpenGL에서 표현되는 공간은 우리 눈에 보이지 않더라도 앞과 뒤의 구분이 있다는 점입니다.

따라서 점과 백터의 구분이 필요합니다.


동차 좌표계 덕분에 오브젝트의 이동을 행렬간의 곱셈으로 표현할 수 있습니다.


컴퓨터 그래픽스에서 동차좌표의 마지막 요소를 Scale Factor로 사용할 수 있으며, 만약 어떤 점의 좌표를 (x, y, z, w) 로 표현했다면 

실제 3차원 좌표의 값은 (x/w, y/w, z/w)로 될 수 있습니다.




동차 좌표를 이용한 회전 및 크기 변환


이동 변환






크기 변환








회전 변환


x축 회전





y축 회전






z축 회전

































반응형