본문으로 바로가기

2D좌표와 클리핑&뷰포트

category CAE/Enjoy Programming 2011. 11. 23. 13:23

이번 포스팅에서는 크리핑과 뷰포트에 대해서 알아보겠습니다.
우선 클리핑과 뷰포트를 이야기 하기전에 2차원 직교 좌표계에를 아셔야되는데
일반적으로 수학적인 관점에서의 2차원 직교 좌표계는 다음과 같습니다.

다들 학교에서 많이 보셔서 충분히 알고 계시겠죠 =.=a
그럼 본격적으로 클리핑에 대해서 설명해 봅시다~
우선 클리핑이란
"화면에 무언가를 그리기 위해서 사용될 좌표를 OpenGL에 알려주는 과정"
이라고 합니다.
그리고 이때 사용되는것이 직교 좌표영역입니다.
클리핑은 주로 두가지 형태로 사용되는데
화면의 좌측하단을 (0.0)으로 설정한 경우와 화면의 중앙을 (0.0)으로 설정한 경우입니다.
여기에서 주의하실 부분은 일반적으로 윈도우에서는 창의 좌측상단이 (0.0)값을 가지기 때문에
OpenGL에서는 좌표계를 뒤집어 주어야 한다는것 입니다.
다음으로 뷰포트란 클리핑 영역과 창의 픽셀 수가 정확히 맞아 떨어지지 않기 때문에
이때 논리적 직교 좌표(아마 OpenGL에서의 좌표를 말하는것 같습니다.^^;;)를
물리적인 화면 픽셀 좌표로 변환하는 과정에서 사용되는 개념
이라고 합니다.
다시 말해 뷰포트란  "창의 클라이언트 영역 내에 클리핑 영역을 그리는 데 사용되는 영역"
이렇게 정의가 되는군요 ^^
글로만 설명하기에는 조금 어려운듯해서 그림을 추가하자면..

<그림1>
<그림1>의 경우 OpenGL에서의 좌표를(논리적 직교좌표) (0.0)에서 (150.100)으로
설정 하는것을 볼 수 있는데 이 공간이 클리핑 공간 입니다.
그리고 이 클리핑 공간을 다시 물리적인 화면 픽셀 300*200 영역에 설정 함으로써
뷰포트는 300*200의 영역이 설정되게 됩니다.
이경우 윈도우의 영역이 클리핑 공간의 4배이기 때문에
클리핑 공간에서 그린 물체는 윈도우 영역에서 4배 확대된 상태로 보여지게 됩니다.

<그림2>
또한 뷰포트 영역은 위의 그림과 같이 윈도우의 일부 영역만을 지정할 수도 있습니다.
이 경우 뷰포트의 클리핑 공간의 크기가 같이 때문에 물체는 클리핑 공간에서와
같은 크기로 보이게 되고
뷰포트를 윈도우 영역보다 더 크게 설정함으로써
클리핑 공간에 그린 물체가 일부 잘려서 보이게도 할 수 있습니다.