## Szöveg kiíratása

Angol nyelvű leírás a GLUT dokumentációban

- 2D betűképek felhasználásával

      void BitmapText( GLfloat x, GLfloat y, char *string )
      {
        int len, i;
        glRasterPos2f( x, y );
        len = (int) strlen ( string );
        for ( i = 0; i < len; i++ ){
          glutBitmapCharacter ( GLUT_BITMAP_HELVETICA_18, string[i] );
        }
      }

- Vonalszakaszokból 3D modellezéssel

      void StrokeText( char *string )
      {
        int len, i;
        len = (int) strlen ( string );
        for ( i = 0; i < len; i++ ){
          glutStrokeCharacter ( GLUT_STROKE_ROMAN, string[i] );
        }
      }

A `BitmapText()` esetén a szöveg x, y koordinátáját is át kell adni. `StrokeText()` esetén geometriai transzformációkkal lehet a szöveget pozícionálni.

      BitmapText( -5.0, 0.0, "proba szoveg" );

      glPushMatrix();
      glColor3f( 1.0, 1.0, 0.0 );
      glTranslatef( 0.0, 11.0, 0.0 );
      glRotatef( 30.0, 0.0, 0.0, 1.0 );
      glScalef( 0.1, 0.1, 1.0 );
      StrokeText( "proba szoveg" );
      glPopMatrix();

## Popup menü készítése

- Menüazonosítók: Minden menühöz/almenühöz egy kell.

        static int MenuID, SubMenuID;

- Menü/almenü opcióinak megadása:

        /* Almenü készítése */
        SubMenuID = glutCreateMenu( ProcessMenu );
        glutAddMenuEntry( "Almenu 1. opcioja", 3 );
        glutAddMenuEntry( "Almenu 2. opcioja", 4 );

        /* Főmenü készítése */
        MenuID = glutCreateMenu( ProcessMenu );
        glutAddMenuEntry( "1. menupont", 1 );
        glutAddMenuEntry( "2. menupont", 2 );
        glutAddSubMenu( "Almenu", SubMenuID ); /* Almenü hozzáadása */
        glutAddMenuEntry( "Kilepes", 5 );
        glutAttachMenu( GLUT_RIGHT_BUTTON ); /* Menü a jobb egérgomb lenyomására jelenik majd meg. */

- `ProcessMenu()` függvény:

      void ProcessMenu(int value)
      {
        switch( value )
          {
          case 1:
            /* 1. menüpont kiválasztva. */
            break;

          case 2:
            /* 2. menüpont kiválasztva. */
            break;

          case 3:
            /* Almenü 1. opciója kiválasztva. */
            break;

          /* És így tovább... */
          }

        glutPostRedisplay();
      }

- További menükezelő GLUT függvények: ../../GLUTSpec3/node35.html

## Feladatok

1. Próbáljuk ki a fenti szövegkiírási módokat!
2. Modellezünk dobókockát úgy, hogy az oldalak értékét ne pöttyök, hanem számok adják meg, amelyek az oldallapok síkjában jelennek meg!