Informàtica gràfica 3. Transformacions geomètriques

OpenGL ens proporciona funcions per a control·lar tres tipus de transformacions geomètriques: translació, rotació i escalat; gràficament resulta senzill d’entendre:

  • Translació:
    translacio
  • Rotació:
    rotacio
  • Escalat:
    escalat

Aquestes transformacions es representen com a matrius 4×4 ordenades com vectors columna tal que:

matriu

No anem a entrar en profunditat en com apliquem matemàticament aquestes transformacions; el codi OpenGL que les realitza és el següent:

glTranslatef(1.0f, 1.0f, 1.0f); // per a translació
glRotatef(45.0f, 1.0f, 0.0f, 0.0f); // per a rotació
glScalef(2.0f, 2.0f, 2.0f);  // per a escalat
objecte();

Amb aquestes transformacions i els objectes que ja haviem creat, podem muntar per exemple una escena com aquesta:

trans1

void escena(){
	//esfera
	glPushMatrix();
	    glTranslatef(0.4f, 0.0f, 0.0f);
		glRotatef(0.0f, 0.0f, 0.0f, 0.0f);
		glScalef(1.4f, 1.4f, 1.4f);
		esferaAlambre(10);
	glPopMatrix();

	//esfera
	glPushMatrix();
	    glTranslatef(-0.4f, 0.0f, 0.0f);
		glRotatef(0.0f, 0.0f, 0.0f, 0.0f);
		glScalef(0.4f, 0.4f, 0.4f);
		esferaAlambre(10);
	glPopMatrix();

	//cilindre
	glPushMatrix();
	    glTranslatef(0.0f, 0.0f, 0.0f);
		glRotatef(45.0f, 0.0f, 0.0f, 1.0f);
		glScalef(2.4f, 2.4f, 2.4f);
		cilindroAlambre(10);
	glPopMatrix();
}

Finalment, utilitzant el següent codi podem usar el mouse per a moure la figura de diferents maneres, usant les transformacions que hem explicat anteriorment. Tampoc anem a entrar en detalls sobre el codi que hem afegit per a que açò funcione, però si n’esteu interessats, podeu analitzar revolucion.c.