좌표계의 시작점

GUI 프로그래밍을 하다 보면 좌표가 어디어디라고 나와 있습니다. 그 좌표를 따라 그리려 하다 보면 우리는 이 좌표가 어디서부터 시작하는지를 알아야 제대로 알 수 있겠죠? 그럼 좌표의 시작점에 대해서 간단하게 다뤄보려 합니다.

일단 하드웨어적인 좌표의 시작은 바로 모니터가 물리적으로 표시하는 표시점입니다. 주로 왼쪽 상단의 최고점입니다. 이 부분을 따서 운영체제 데스크톱 환경에 종속된 프로그램들의 경우에는 전부 왼쪽 상단을 기본 점으로 하여 좌표를 설정합니다. VESA 환경도 왼쪽 상단부터 시작하는 좌표를 나타내주고, 각 그래픽카드 드라이버들도 최초 드로잉 포인트를 왼쪽 위로 맞춰주고, 그에 따라 부팅하는 곳부터 시작해서 죄다 왼쪽 위에 맞춰집니다. 그렇다 보니 운영체제에서 화면 출력하는 곳도 당연히 왼쪽 상단으로 갑니다.

운영체제의 좌표 시작이 왼쪽 상단인 것을 확인하는 가장 간단한 방법은 마우스를 이용하는 것입니다. 마우스의 포인터는 운영체제의 입장에서는 마우스라는 입력 장치의 인풋에 따라 동작하는 하나의 그래픽 객체입니다. (이건 운영체제 개발해 보면 더 정확하게 알 수 있습니다.) 그렇기 때문에 화면 출력 방식도 운영체제가 출력하는 방식대로 동작하죠. 즉, 마우스 포인터도 기본 시작 좌표가 왼쪽 상단입니다.

이제 그걸 확인해 보죠. 마우스를 왼쪽 상단 제일 구석으로 이동해 보세요. 마우스 포인터가 전부 다 출력됩니다.

이제 오른쪽 상단으로 가 보면… 포인터가 왼쪽 모서리만 아주 살짝 보일 겁니다. 포인터 이미지가 숨었죠. 왼쪽 상단의 인식점이 모니터 해상도까지만 움직이도록 프로그래밍 되어 있어서 그 외에 화살표 이미지 부분이 모니터 출력 해상도 바깥으로 나간 겁니다. 하지만 마우스 포인터가 클릭해야 할 좌표 포인터쪽은 계속 모니터 안을 클릭해야 하니 왼쪽의 모서리 부분만 남아서 보이는 것입니다.

이게 모니터 기본 출력과 운영체제에서 화면 출력하는 곳이 같은 증거입니다. 게다가 마우스의 화살표 방향이 우리가 그냥 많이 봐서 친숙해져서 그렇지 왜 커서 모양이 공통적으로 왼쪽 위를 가리키는 화살표 모양인지도 알려주는 지표가 되죠. ㅡㅅㅡ

그렇다 보니 우리가 해당 운영체제에서 동작하는 네이티브 프로그램들의 좌표 시작점들이 왼쪽 위로 되어 있는 것입니다. 상당히 충실하게 따른 좌표점입니다. ㅇㅅㅇ

하지만 운영체제와는 독립적으로 동작하는 환경의 경우에는 다른 시작점을 갖는 경우가 많습니다. 대표적인 것이 바로 JVM 위에 동작하는 응용 프로그램들입니다. 이러한 환경들의 대다수는(아닌 것들도 있습니다) 화면 중앙에서 시작합니다. 이건 이유가 몇 가지 있습니다.

1. 운영체제 종속성을 피하기 위해 가상머신과 연동되는 과정에서 실행되는 화면의 중심을 받아오는 경우
2. 해당 GUI 프로그래밍에서 제공되는 좌표 개념이 전부 상대좌표로 되어 있어서 상대좌표로 개발해야 하는 경우

위의 둘 외에도 많은 이유가 있겠습니다만 주로 저 둘로 좁혀서 생각하는 경우가 많습니다. 첫번째 경우의 경우에는 대상 환경이 그냥 제공하는 것이기 때문에 그 환경에 익숙해지다 보면 그냥 쓸 수 있는 부분입니다. 물론 개발자가 좀 번거롭긴 하겠습니다만.. 못할 껀 없죠?

두번째 것이 요즘 들어서 대두되는 환경입니다. 디바이스가 다양해지고 해상도가 다양해 지면서 생긴 현상입니다. 예전에는 그런 거 없었냐고요? 있었죠. 단, 그렇게 신경을 쓸 이유가 없었습니다. PC에서야 해상도라고 해봐야 어느정도 정해져 있는 것이기도 하고, 동일한 오브젝트를 서로 다른 해상도에서 지원하는 것에 대한 개념이 덜했기 때문이죠. 사실 PC에서 화면 해상도가 늘어서 표현 가능한 좌표가 늘었다고 해서 픽셀이 더 빡빡해지거나 하는 것이 아니니깐요. 오히려 표시되는 화면 영역이 더 넓어지고 그에 맞춰서 오브젝트 크기가 정해졌을 뿐이니깐요. 두번째 껀 사실 상대좌표 설명할 때 더 자세히 다루겠습니다.

또한 좌표계에 대해 민감하게 반응하는 분야가 바로 그래픽스 분야죠. 이분들껄 다루면 제가 프로그래머가 아니게 될 정도로 심각한 분량을 다루게 될 꺼 같아서 더 이상 생략합니다. ;ㅅ; 대신 이분들의 좌표계의 시작은 대부분 작업하기 편한 곳부터 맞춰 나가는 경향이 있습니다.

마지막으로 좌표계에 대해서 반드시 고민하고 넘어가야 하는 분야가 있습니다. 바로 게임이죠. ㅡㅅㅡ (중요해요. 여기도 중요성은 상당합니다. ;ㅁ;) 특히 게임에서의 좌표계의 시작점은 2D의 경우에는 항상 왼쪽 아래부터 시작하는 경우가 많은데 이건 움직임에 대해서 쉽게 표현하고 쉽게 계산하기 위한 겁니다. 실제의 물리 효과와 움직임을 계산한 대로 표현하는 데 있어서는 제일 편한 방식이죠. 근데 이걸 그냥 왼쪽 아래를 (0,0)으로 합니다라고 간단하게만 써놓다 보니 그냥 그렇구나 하고 넘어가는거죠. ㅡㅂㅡ;;;

좌표계의 시작점의 위치에는 이유들이 있습니다. ㅇㅅㅇ;;