Chap 11. Raster Graphics in OpenGL
Chap 11. Raster Graphic in OpenGL2 Content Draw bitmap image Use bitmap fonts Draw color images Read and copy color images on the screen Read and write Windows bitmap files
Chap 11. Raster Graphic in OpenGL3 Drawing Bitmaps(1/2) OpenGL 에서는 bitmap 을 그리기 위해 glBitmap 함수를 제공. glBitmap 의 첫번째 색깔 (0) 은 투명하고, 두번째 색깔 (1) 은 현재의 색과 빛 물질속성을 사용하여 그려짐. Bitmap 은 “Upside Down” 방식으로 아래에서 위방향으로 정의한다. Source Code1Program 1 Program 0
Chap 11. Raster Graphic in OpenGL4 Drawing Bitmaps(2/2) glRasterPos2i(int x, int y) : 좌표 (x,y) 에 raster 의 위치를 지정하고, raster position valid Flag 를 정한다. 이 Boolean 플래그는 raster 의 위치가 뷰포트 안쪽에 있다면 True 이고 바깥쪽이면 False 이다. glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte *bits) Program 3Source Code 2Program 2
Chap 11. Raster Graphic in OpenGL5 Bitmap Fonts 비트맵에서의 중요한 응용 프로그램 –Displaying character strings : 마이크로소프트 윈도우의 Win32 라이브러리에서 “wglUseFontBitmaps” 함수를 제공. OpenGL 에서 제공하는 함수 –glGenLists –glListBase –glCallLists Source Code 3 Source Code 4
Chap 11. Raster Graphic in OpenGL6 Building a simple Font library 기본적인 구성 –character set 을 결정 –Font 의 이름 – 문자의 스타일 부가적인 기능 –FontDelete –FontPuts –FontPrintf Source Code 5 Source Code 6 Source Code 7 Source Code 8 Program 4 Program 5
Chap 11. Raster Graphic in OpenGL7 Pixmaps : Bitmaps with Color(1/6) pixmaps : 두 가지 이상의 색을 가진 image. Background image 나 texture 로 사용된다. 일반적으로 OpenGL 에서는 8 비트 color index image 이거나 24 비트 RGB image 이다. glDrawPixels –glBitmap 과 같이, glDrawPixels 는 이미지의 bottom-left 를 정의하기 위하여 현재의 래스터 위치를 사용한다. –glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels)
Chap 11. Raster Graphic in OpenGL8 Pixmaps : Bitmaps with Color(2/6) 형식설명 GL_COLOR_INDEX GL_LUMINANCE GL_RGB 컬러 인덱스 픽셀 그레이스케일 픽셀 RGB Pixel GL_BYTE GL_UNSIGNED_BYTE GL_BITMAP Signed 8 비트 값 Unsigned 8 비트 값 비트맵 이미지 형식설명 OpenGL 픽셀형 OpenGL 픽셀 포맷
Chap 11. Raster Graphic in OpenGL9 Pixmaps : Bitmaps with Color(3/6) glPixelMap 이나 glPixelTransfer 함수를 사용하여 pixmap 이나 비트맵내의 색을 remap 할 수 있다. glPixelTransfer : 색 인덱스와 RGB 값에 대한 스케일링과 옵셋을 지정. glPixelTransferref(GL_RED_SCALE, 1.1) glPixelTransferref(GL_GREEN_SCALE, 1.1); glPixelTransferref(GL_BLUE_SCALE, 1.1); 팔레트 엔트리로 비트맵의 컬러 인덱스를 지정하는 방식 glPixelTransferi(GL_INDEX_OFFSET, bitmap_entry) Source Code 9Program 6
Chap 11. Raster Graphic in OpenGL10 Pixmaps : Bitmaps with Color(4/6) Color Mapping Table –Lookup Table : 복잡한 이미지의 색 보정에 사용 (357page 의 그림 11-2 참조 ) Scaling a Pixmap –glPixelZoom 을 사용하여 pixmap 의 크기를 조절할 수 있음 –image 를 스케일하고 flip 할 수 있음 – 다른 비선형의 효과에 대하여, rippling water 나 perspective correction 에 대해서 Texture Mapping 을 사용 (12 장 ) Source Code 10Source Code 11
Chap 11. Raster Graphic in OpenGL11 Pixmaps : Bitmaps with Color(5/6) Panning a Pixmap –glPixelStore 함수를 이용하여 image 내부 pan 이 가능 Reading Pixmaps –glReadPixels 함수를 이용하여 화면에서 image 를 읽는 게 가능 –Texture mapping 으로 cool 효과를 위하여 사용될 수 있음 – 현재의 raster 위치를 무시하고 읽기 위하여 image 의 bottom- left 에 대한 view port 좌표지정이 필요 Source Code 12 Source Code 13
Chap 11. Raster Graphic in OpenGL12 Pixmaps : Bitmaps with Color(6/6) –View port array definitionsView port array definitions Copying Pixmaps – 화면상의 영역을 다른 위치로 복사하기 위한 함수 화면상의 영역을 다른 위치로 복사하기 위한 함수 –void glCopyPixels(Glint x, Glint y, Glsizei width, Glsizei height, Glenum type)void glCopyPixels(Glint x, Glint y, Glsizei width, Glsizei height, Glenum type) 0 View port 의 X 원점 1 View port 의 Y 원점 2 View port 의 X 크기 3 View port 의 Y 크기 IndexDescription Source Code 14
Chap 11. Raster Graphic in OpenGL13 A Bitmap File Viewer(1/3).BMP 파일의 특징 –Data 압축 체계를 이용하지 않아 OpenGL program 에서 사용하기 쉽다. – 사용된 color 의 형식에 따라 세개나 네개의 section 으로 구성..BMP 파일의 구성 BITMAPFILEHEADER BITMAPINFO Bitmap/Pixel Data RGB.BMP File BITMAPFILEHEADER BITMAPINFO PALETTEENTRYs Bitmap/Pixel Data Pallette.BMP File Definition
Chap 11. Raster Graphic in OpenGL14 A Bitmap File Viewer(2/3) Reading the.BMP File Writing the.BMP File LoadDIBitmap SaveDIBitmap
Chap 11. Raster Graphic in OpenGL15 A Bitmap File Viewer(3/3) PrintDIBitmap RepaintWindow OglViewer Printing the Bitmap Displaying the Bitmap 최종 Program
Chap 11. Raster Graphic in OpenGL16 Reference Section Frame buffer 에서 Pixel 의 사각형 block 을 복사 –glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type); Frame buffer 에서 Pixel 의 사각형 block 을 그림 –glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const Glvoid *pixels) Pixel 전송을 위한 Lookup Table 을 정의 –glPixelMapfv(Glenum map, GLint mapsize, const GLfloat *values); –glPixelMapuiv(Glenum map, GLint mapsize, const GLuint *values); –glPixelMapusv(Glenum map, GLint mapsize, const GLushort *values);
Chap 11. Raster Graphic in OpenGL17 Reference Section Pixel 이 memory 에서 저장되고 읽히는 방법을 control –glPixelStorei(GLenum pname, GLint param); –glPixelStoref(GLenum pname, GLfloat param); glCopyPixels, glDrawPixels, glReadPixels, glTexImage1D, glTexImage2D 에 대한 Pixel 전송 모드와 옵션을 정한다. –glPixelTransferi(GLenum pname, GLint param); –glPixelTransferf(GLenum pname, GLfloat param); Pixel 전송을 위한 scaling 을 정한다. –glPixelZoom(GLfloat xfactor, GLfloat yfactor); Frame buffer 에서 Pixel 의 block 을 읽는다. –glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, const Glvoid *pixels);
Chap 11. Raster Graphic in OpenGL18 감사합니다