glRasterPos 함수와 glWindowPos 두 함수는 얼핏 보기에는 비슷해 보인다. 하지만 큰 차이점이 있다.
먼저 내가 어떤 상황에서 두 함수를 사용할 일이 있었는지를 설명해 보자.
내가 현재 작성중인 프로그램에서는 수십장의 화면을 미리 만들어서 glReadPixels를 이용해서 메모리에 저장해
놓았다가 그것을 glDrawPixels를 이용해서 빠르게 보여주는 것이다.
뭐 물론 실시간을 보여주면 안되냐는 간단한 질문을 할 수가 있다..=.=
하지만 문제는 하나의 화면 렌더링에 걸리는 시간이 크기 때문에 그럴수 없다는 것이다.
그래서 glDrawPixels를 실행할때는 반드시 현재의 Raster 위치 (즉, 그림을 그려넣기 시작할 왼쪽 아래 시작 부분)이 어딘지를 확인해야 한다.
만약 그 값이 minus이거나 invalid 한 값이라면 화면에는 당연히 아무것도 그려지지 않는다.
처음에 나는 단순하게 glDrawPixels 명령 바로 위에 glRasterPos2i(0, 0)을 했다.
단순히 생각해서 Raster 위치를 window coordinates (사용자가 보는 window의 왼쪽 제일 구석 지점)의 0, 0으로 이동시키고자 했던 것이다.
하지만 중요한 점을 간과했으니 이놈은 화면에 존재하는 vertex처럼 matrix에 의해 변환이 된다는 것이다.
고로 내가 이전에 model_view matrix를 사용했고 loadidentity로 초기화 시켜 놓지 않았다면 이전에 남아있는 행렬 변환이 여기서 적용되게 되는 것이다.
그 결과 값이 터무니 없는 값으로 나오게 되었고 화면에는 깜깜한 배경외에는 아무것도 보이지 않았다.....
나중에 알았지만 이 함수를 대체할수 있는것이 OpenGL version 1.4이후에 나왔으니 바로, glWIndowPos 함수다.
이것은 행렬 변환, 치환 이런 것에 전혀 개의치 않고 현재의 윈도우 좌표계를 절대적인 값으로 적용하여
raster의 위치를 잡는다. 고로 이 함수로 glWindowPos3f(0.0, 0.0, 0.0)을 하면 현재 내 출력 윈도우의
좌표계에서 무조건 (model view matrix고 나발이고) 0, 0을 기준으로 그림을 그려 넣게 된다...
두개중에 어떤것을 사용해야 할지는 경우에 따라 다르겠지만 중요한 사실은 두 함수는 행렬 변환 matrix에 영향을 받느냐 혹은 안받느냐가 가장 큰 차이점이라는 것이다.... 명심하자.
'OpenGL' 카테고리의 다른 글
OpenGL Rendering Context v.s. Windows Device Context (0) | 2009.03.12 |
---|---|
Oh my god... 이게 사진이 아니라고? (0) | 2008.01.18 |
OpenGL 에서 조명 설정에 관하여... (0) | 2007.11.16 |
Stencil Buffer의 사용법 (6) | 2007.09.22 |
OpenGL (0) | 2007.09.19 |