# Geometriai transzformációk – Tankos példaprogramok

## Forráskódok

- tank.c: Három, egymástól független téglatest modellezésével (magyarázó ábra)
- tank2.c: A felső két téglatest közös mozgásainak kiemelésével
- tankos3.c: Interaktívan változtatható paraméterezéssel. (`/pub/szgrafika/szamitogepes_grafika/Tutors.linux/tankos3`)

## `tank2` példa részletesen

### Modellezés felépítése

### Programkód működésének követése

Programkód (`tank2.c`) | ModelView mátrix aktuális tartalma | Veremművelet | Mátrixverem
    /* ModelView a verembe */
    glPushMatrix();

      /* R1: minden objektum elforgatasa, hogy jol lathato legyen */
      glRotatef(45, 0.5f, 1.0f, 0.5f);

      glColor3f(0.5, 0.5, 0.5);
      glPushMatrix();
        /* S1: also resz meretre alakitasa */
        glScalef(1.2, 0.7, 2.0);
        /* kocka: origo kozeppontu */
        glutSolidCube(30);
      glPopMatrix();

      /* Ty: felso forgo resz es agyucso pozicionalasa */
      glTranslatef(0.0, 17.5, 0.0);
      /* Ry: felso forgo resz es agyucso elforgatasa y tengely korul */
      glRotatef(yRot, 0.0f, 1.0f, 0.0f);
      glPushMatrix();
        /* S2: felso forgo resz meretre alakitasa */
        glScalef(1.0, 0.7, 1.7);
        /* kocka: origo kozeppontu */
        glutSolidCube(20);
        glPopMatrix();

        glPushMatrix();
        /* T1: agyucso a felso forgo resz ele */
        glTranslatef(0.0, -1.5, 17.0);
        /* R2: agyucso emelkedese */
        glRotatef(xRot, 1.0f, 0.0f, 0.0f);
        /* S3: agyucso nyujtasa 7-szeresre */
        glScalef(1.0, 1.0, 7.0);
        /* T2: kocka "hatso" lapjanak kozepe legyen az origoban */
        glTranslatef(0.0, 0.0, 2.5);
        /* kocka: origo kozeppontu */
        glutSolidCube(5);
      glPopMatrix();

    // Restore the matrix state
    glPopMatrix();
    I

    I

    I * R1

    I * R1

    I * R1 * S1

    Alkalmazása: kocka csúcspontjaira.
    I * R1

    I * R1 * Ty

    I * R1 * Ty * Ry
    I * R1 * Ty * Ry

    I * R1 * Ty * Ry * S2

    Alkalmazása: kocka csúcspontjaira.
    I * R1 * Ty * Ry

    I * R1 * Ty * Ry

    I * R1 * Ty * Ry * T1

    I * R1 * Ty * Ry * T1 * R2

    I * R1 * Ty * Ry * T1 * R2 * S3

    I * R1 * Ty * Ry * T1 * R2 * S3 * T2

    Alkalmazása: kocka csúcspontjaira.
    I * R1 * Ty * Ry

    I
         -->

         -->

         <--

         -->

         <--

         -->

         <--

         <--
    Üres

    (I)

    (I * R1), (I)

    (I)

    (I * R1 * Ty * Ry), (I)

    (I)

    (I * R1 * Ty * Ry), (I)

    (I)

    Üres