태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

[General] Window to Viewport mapping - 윈도우-뷰포트 사상

Posted on 2007.10.14 23:10
Filed Under Development

 WC : [실세계 좌표계 World Coordinate]
     오른손 법칙에 의한 직교 좌표계로 응용 프로그램에 의해 사용되며 물체의 실제 좌표를 나타낸다. 회전변환,크기변환 같은 행렬을 통한 변환들은 실세계 좌표에 직접 적용 가능

DC : [장치 좌표계 Device Coordinate]
    실제 사용되는 장치에 상응하는 것으로 물체의 화상이 나타날 장치의 표면과 연관

실세계 좌표로 부터 장치 좌표로의 변환은 사용하는 디스플레이 장치의 형태에 따라 달라짐.
그러므로 모델을 기술하는 기하학적 데이터를 디스플레이 장치별로 서로 다른 장치좌표로 변경해 주는 드라이버가 없으면, 특정 컴퓨터 시스템을 위해 개발된 응용 프로그램은 다른 시스템에서는 동작이 되지 않을 수 있다. 이러한 장치간의 좌표계의 차이가 휴대성을 해치기 때문에 응용 프로그램을 사용하는 것을 어렵게 한다. 또한 개별 장치를 고려해야 한다면 컴퓨터 그래픽 응용분야를 위한 일반적인 방법들이 그 중요성을 잃게 된다.

NDC : [가상적, 또는 정규 장치 좌표계 Normalized Device Coordinate]
    이상적인 그래픽 장치를 위해 정의. 이 장치의 디스플레이 표면은 일반적으로 단위 정사각형으로 이루어지는데 이의 원점은 좌하단(botton-left)에 위치한다.


모델은 초기에 응용프로그램에 의해 실세계 좌표계상에 기술된 후, WC공간으로 부터 NDC공간으로 좌표를 변경하는 뷰잉 변환이 수행된다. 이 시점에서 모델은 어떠한 디스플레이 장치에서도 보여질 수 있는데 그 이유는 NDC는 사용되는 디스플레이 장치의 형태와 무관하기 때문이다. 최종적으로, 사용되는 디스플레이 장치의 한계를 고려한 장치 좌표로의 변환이 일어난다.

 -> 즉 WC(응용프로그램) 에서 바로 DC(모니터)로 그래픽을 표현하려면 DC 란 놈은 작동방식이 모두 틀리기 때문에 일일이 WC의 간섭이 필요함과 동시에 다른 DC에서는 제대로 구동되지 않을 확률이 높다. 그렇기 때문에 NDC(공용규약정도?) 를 둠으로써 동일한 화면이 나오도록 하는것이다. 또는 DC 를 모니터의 해상도로 보면 NDC 에 들어온 것을 모니터의 해상도에 맞게 늘려주는것도 어떤 해상도에서건 동일한 화면이 보여지게 된다. 이런 맥락으로도 해석이 가능하다.



윈도우-뷰포트 사상

개념적으로 어떤 위치의 WC 의 물체는 NDC(뷰포트) 상의 어떤위치에 그리는 것이다.
WC 상의 화면의 x,y 최소값, x,y 최대값과 NDC 상의 화면의 x,y 최소값, x,y최대값
그리고 WC 화면내의 물체 좌표, 뷰포트 내의 물체 좌표 가 필요한 요소이다.
각각 [Xwmin,Ywmin , Xwmax, Ywmax], [Xvmin, Yvmin, Xvmax, Yvmax] , [Xw,Yw] , [Xv,Yv] 로 정의하면 다음과 같은 관계식으로 표현된다.

[Xv-Xvmin] / [Xvmax-Xvmin] = [Xw-Xwmin] / [Xwmax-Xwmin]
그리고 [Yv-Yvmin] / [Yvmax-Yvmin] = [Yw-Ywmin] / [Ywmax-Ywmin]
그러므로 Xv=(Xw-Xwmin)( [Xvmax-Xvmin] / [Xwmax-Xwmin] ) + Xvmin
              Yv=(Yw-Ywmin)( [Yvmax-Yvmin] / [Ywmax-Ywmin] ) + Yvmin

다음 항들 ( [Xvmax-Xvmin] / [Xwmax-Xwmin] ) 그리고 ( [Yvmax-Yvmin] / [Ywmax-Ywmin] ) 는 사상되는 모든 점에 대해 상수이며 단순히 x와 y방향으로의 크기변환 인수로 Sx 와 Sy로 표기한다. 만약 Sx ‡ Sy 이면 사상된 물체의 찌그러짐이 발생한다. 이러한 상황을 나타내는 개념이 종횡비(aspect ratio) 이다. 각각의 종횡비는 너비의 높이에 대한 비율로 다음 식과 같다.  AR = [Xmax-Ymin] / [Ymax-Ymin]


예제-
좌하단의 좌표가 (2,2) 이고 우상단이 (6,5)인 윈도우에 포함된 점들을 좌하단의 좌표가 (1/2 , 1/2) 이고 우상단이 (1,1) 인 정규화된 뷰포트에 사상하는 변환행렬을 구하라.

풀이-
윈도우와 뷰포트의 매개변수는 다음과 같다.
Xwmin = 2     , Xvmin = 1/2
Xwmax = 6    , Xvmax = 1
Ywmin = 2     , Yvmin = 1/2
Ywmax = 5    , Yvmax = 1

이에 대한 크기변환 상수 Sx와 Sy 는
Sx = (1-1/2) / (6-2) = 1/8
Sy = (1-1/2) / (5-2) = 1/6

이때 어떤 점에 대한 뷰포트상의 좌표는
Xv = (xw-xwmin)Sx + Xvmin
Yv = (yw-ywmin)Sy + Yvmin
가 된다.

이를 행렬로 표현하면
[Xv Yv 1] = [Xw Yw 1] [                      Sx                             0    0
                                                           0                           Sy    0
                                 (-Sx*Xwmin+Xvmin)   (-Sy*Ywmin+Yvmin)   1  ]
가 된다.
그리고 여기에 매개변수 값들을 대입하면 변환행렬은 다음과 같다.
Mmap = [1/8    0  0
                 0 1/8  0
              1/4 1/6  1  ]


터치패드 (아날로그로 부터 입력되어 ADC 를 거친후 나오는 좌표) 와 매칭될 LCD 간의 캘리브레이션을 할때도 이 방식을 사용하면 가능할 듯 하다.
터치패드로 입력된 값을 LCD 에 표현할때 실제 변환되어 표현될 지점과 실제 표기된 점을 비교하여 차이점을 구하여 적용하는 방식으로 ^^  (될지 안될진 모르겠다)
신고

댓글을 달아 주세요

About



모바일 페이지 QR 코드

Counter

· Total
: 468,648
· Today
: 0
· Yesterday
: 142


DNS server, DNS service