GLUT Tutorials

비트맵폰트

비트맵폰트는 2D 폰트를 말합니다. 비트맵폰트를 3D 상에서 표현하지만 굵기가 없고 회전 및 크기변환을 할 수 없습니다. 오로지 이동만 할 수 있습니다. 그리고 이 폰트는 빌보드처럼 항상 관측자 쪽으로 향하고 있습니다. 이 점이 안 좋은 것 같지만 다르게 생각해보면 폰트의 방향에 대해서 신경 쓰지 않아도 되는 것입니다. 폰트는 항상 관측자 쪽으로 향해있으니까요.

이번 장에서는 비트맵형식의 폰트를 화면에 출력하는 GLUT 함수에 대해서 알아보겠습니다. 우선, glutBitmapCharacter 함수가 필요합니다. 다음은 이 함수의 설명입니다.

void glutBitmapCharacter(void *font, int character) 

인자 설명:
font - 사용할 폰트의 이름입니다.(아래에 사용가능한 값들이 있습니다.)
character - 렌더링할 대상입니다. 문자, 기호, 숫자 등등...

font 인자에 설정할 수 있는 값입니다.:

  • GLUT_BITMAP_8_BY_13
  • GLUT_BITMAP_9_BY_15
  • GLUT_BITMAP_TIMES_ROMAN_10
  • GLUT_BITMAP_TIMES_ROMAN_24
  • GLUT_BITMAP_HELVETICA_10
  • GLUT_BITMAP_HELVETICA_12
  • GLUT_BITMAP_HELVETICA_18

위의 폰트이름만 봐도 어떤 폰트가 쓰일 것인지 어느 정도 알 수 있겠지만 팝업메뉴를 통해서 모두 살펴볼 수 있도록 예제프로그램을 만들었으니 이 문서를 다 읽고 나서 살펴보세요.

다음 줄의 예제는 glutBitmapCharacter 함수를 호출해서 현재 레스터 위치에 한 개의 문자를 출력하는 것입니다.

glutBitmapCharacter(GLUT_HELVETICA_18,'3');

다음은 레즈터 위치에 관한 것입니다. 레스터 위치는 OpenGL 라이브러리군 중 glRasterPos 함수로 설정할 수 있습니다. 다음은 이 함수의 설명입니다.:

void glRasterPos2f(float x, float y);
void glRasterPos3f(float x, float y, float z); 

인자 설명:
x, y, z - 문자열이 출력될 지역 좌표값입니다.

glutBitmapCharacter 함수는 설정된 위치에 문자를 렌더링하고 현재 레스터 위치는 문자의 너비만큼 이동됩니다. 그래서 문자열을 렌더링하면, glutBitmapCharacter 함수가 연속해서 호출되어 원하는 출력을 만들어 냅니다. 다음 함수는 지정된 레스터 위치에서 시작하여 하나의 문자열을 출력하는 함수입니다.

void renderBitmapCharacter(float x, float y, float z, void *font, char *string)
{ 
    char *c;
    glRasterPos3f(x, y,z);
    for (c=string; *c != '\0'; c++)
    {
        glutBitmapCharacter(font, *c);
    }
}

Visual C 프로젝트 파일 을 받아서 실행해 보세요. 이 프로젝트는 "세상을 둘러 보아요~ 2 탄" 의 예제를 뼈대로 이용했습니다. 달라진 점은 렌더링을 처리하는 함수에서 renderBitmapCharacter 함수를 호출하는 것과 폰트를 선택을 위해서 팝업메뉴를 제공하는 것입니다.