Geometriai transzformációk – Tankos példaprogramok


Forráskódok


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