Win32 API 에서 '출력 좌표' 와 '매핑모드' 에 대해 .. ㅠㅠ 정말 모르겠습니다 ㅠㅠ
기초적인 부분인 것 같지만 ..
제 나름대로의 노력으로는 .. 어디에서도 답을 얻을 수 없어서 올리는 글인데요 ^^ ;;
두서없이 생각나는 대로 긁적이다 보니 .. 바보스럽고, 긴 글이 되어버렸네요 .. ㅠㅠ
시간 넉넉하신 분께서만 읽으셔야 할 것 같습니다 ... 죄송합니다 ㅠㅠ
책 몇 권과 웹 서핑을 통해 "출력 좌표" 와 "매핑 모드" 를 공부하고 있는데요 ..
책들과 웹 문서들에서는 .. 용어들의 개념에 대한 설명에만 치중해 있어 ..
구체적인 원리에 대한 이해가 어렵네요 ... ;;
그렇다보니 .. 용어들간의 관계가 와닿질 않아요 ;
일단 책과 웹 문서에서 알아낸 바를 아울러 간단히 정리하면 아래와 같던데요 .
논리좌표 :윈도우즈 내부에서 사용되는 좌표 (DC핸들을 인수로 받아들이는 모든 함수가 사용, 장치에 독립적)
물리좌표 : 실제화면에 출력되는 좌표 (필섹단위, 윈도우를 관리하는 함수에서 사용, 장치에 의존적)
윈도우 : 논리좌표가 사용되는 표면
뷰포트 : 물리좌표가 사용되는 영역 (실제로 사용자의 눈에 보이는 좌표 영역)
맵핑모드 : 논리좌표값을 물리좌표값으로 변환할 때 참고
용어들의 의미는 어설프게나마 알 것도 같은데요 ..
출력 과정에 이들이 서로 .. 어떻게 연관지어져 .. 작용하는 것인지는 ..
모르겠습니다 ㅠㅠ
제가 대충 알고 있는 출력 과정은 ..
1. 맵핑모드를 설정한다 .
2. 출력 원점을 지정한다 .
3. 출력 GDI 함수를 호출 한다 .
정도입니다 .
가령, SetPixel() 로 .. 논리좌표값을 지정하면 ..
이 좌표값은 설정된 맵핑모드를 참고해 ..
물리좌표값으로 변환한 후, 원점을 기준으로 윈도우의 특정 위치(좌표값)에 점(dot)을 출력하게 되는 것 같은데요 .
만약 .. 맞다면 .. 과정 중에 아래와 같은 의문이 생기는데요 ..
1 . 원점 지정
원점(x:0, y:0 )을 변경하면 윈도우 내 클라이언트 영역의 좌측 상단 모서리가 아닌 ..
다른 위치가 원점이 되는데요 .
이때, SetWindowOrgEx(); 를 이용하는 것과 SetViewportOrgEx(); 를 이용하는 것은 ..
어떤 차이가 있는 것인가요 .
(물론, 어떤 걸 사용하든 결과는 같게 나타나는데요 .. 어떤 원리에서 같은 결과가 나오는지
모르겠어요 ... 또한, ... 후자는 원점의 좌표값을 바로 지정하면되지만, 전자는 왜 음수로
지정해야 하는 것인지도 .. 이해가 안 갑니다 ㅠㅠ)
2. 뷰포트와 윈도우
지금의 주제(출력 좌표, 매핑모드) 에서 나오는 ..
'윈도우' 는, 모니터에 표시되는 그 윈도우를 의미하는 거랑은 다른 건가요 ?
뷰포트도 실제 화면에 표시되는 영역이고, 이에 대립되는 개념으로 '윈도우' 를 설명하는 것 같던데 ..
둘은 무엇이 다른 건가요 ?
가령, 분류 기준부터가 다른 건가요 ? (뷰포트는 '영역' 이고 윈도우는 '표면')
3. 가변적인 매핑 모드
매핑 모드의 .. 고정적인 매핑모드들은 ..
왜 필요한지 .. 출력 과정에서 어떻게 이용되는지 ..
어느 정도 이해할 수 있을 것 같은데요 ..
(직접 테스트를 통해 확인했 때문에 .. ;;)
근데, "가변 모드" 는 이해가 안 됩니다 .
( MM_ISOTROPIC / MM_ANISOTROPIC )
가변 모드를 사용하는 예제가 있어서 ..
왜 필요한 것인지는 대충 감이 잡히는데요 .
어떤 식으로 사용하는 것인지는 전혀 모르겠습니다 ㅠㅠ
SetMapMode(hdc, MM_ANISOTROPIC); // 매핑모드를 가변으로 설정한다 .
SetWindowExtEx(hdc, 160, 100, NULL); // 윈도우를 160, 100 으로 확장한다 ?????
// (좌표값은 우측하단 모서리에 대한 논리좌표값 ??????)
GetClientRect(hWnd, &rect); // 클라이언트 영역의 크기를 얻는다 (윈도우 우측 하단 모서리의 좌표값)
SetViewportExtEx(hdc, rect.right, rect.bottom, NULL); // 얻어온 현재 클라이언트 영역의 크기로
// 뷰포트를 확장한다 ????
Window 와 ViewPort 의 '무엇인가' 를 일치시켜주는 과정인 것 같기도 하고 .. ^^ ;;;
어렵네요 .
각각의 SetWindowExtEX() 함수와 SetViewportExtEx() 함수의 용도는 ..
winapi.co.kr 에 나온 api 레퍼런스와 .. MSDN 으로 확인했는데 .. 무슨 말인지 모르겠더라고요 ㅠㅠ
바쁜 시간 내어, 긴 글 읽어주셔서 감사합니다 .
답이 없더라도 .. 읽어주신 것만으로도 충분히 감사합니다 .
P.S. 모든 의문이 .. 그본적으로 ..
Windows 의 출력 과정에 대한 이해가 부족한 탓이라고 생각합니다 .
질문도 웬만큼 아는 사람이어야 .. 질문 다운 질문을 할 수 있는 것처럼 ..
아마도 저는 지금 ..
'뷰포트' 와 '윈도우' 의 관계 .. 그리고,
'논리좌표' 와 '물리좌표' 의 관계 .. 를 모르고 있는 것 같은데요 .
혹시, 이들을 .. 실 세계에 견주어 생각할 만한 .. 예가 있으면 좀 알려주셔요 ㅠㅠ
댓글 달기