|
InfoJosep
www.infojosep.es
|
|
Menu Introducción primer programa Primitivas y atributos Transformaciones Proyecciones Iluminación Texturización Efectos Todos los Ejemplos
TRANSFORMACIONES GEOMETRICAS
Primero de todo que son las transformaciones, tal y como indica el nombre es una transformación que hacemos a un objeto de nuestra escena por ejemplo darle la vuelta en este caso estamos hacemos una transformación de rotación, también podemos escalar el objeto y trasladarlo de un sitio a otro.
Bueno manos a la obra voy a explicar estos tres tipos de transformaciones Escalar, Trasladar, Rotar.
ESCALAR
Para escalar un objeto utilizaremos la función glScalef(x,y,z) . Definiremos el escalado de cada uno de los ejes.
Por ejemplo si queremos escalar un objeto en 2 unidades :
glScalef( 2,2,2)
y aqui dibujaremos el objeto o objetos que queremos que se aplique este escalado.
TRASLADAR
Para trasladar un objeto de nuestra escena lo haremos mediante la función glTranslatef(x,y,z).
Por ejemplo si queremos desplazar un objeto en el eje de la x 100 unidades, escribiremos:
glTranslatedf(100,0,0)
y ahora dibujaríamos el o los objetos que queremos que se aplique este traslado.
ROTAR
Para poder girar un objeto de nuestra escena lo haremos con la función glrotatef(alpha,x,y,z) donde alpha serán los grados que queremos que se roten respecto el eje x, y,z.
Por ejemplo si queremos rotar 45 grados respecto el eje de coordenadas z, lo haremos de la siguiente manera:
glrotatef(45,0,0,1)
y ahora dibujaríamos el objeto o objetosque queremos que se roten.
Como veis este tipo de transformaciones con OpenGl son muy sencillas, ya que no tenemos que pensar mucho en algebra para hacer los cálculos de matrices.
MATRIZ DE IDENTIDAD
Si en nuestra escena hay mas de un objeto a dibujar cuando intentemos aplicar una transformación todos los objetos que haya después se les aplicaran esta transformación pero puede que a nosotros no nos interese, ya que solo queramos aplicar una transformación a un objeto y no a todos y si encima aplicamos otra transformación se multiplicara con la primera que hayamos utilizado, esto significa que las funciones de transformación son acumulativas. Pues lo que hace la matriz de identidad es reiniciar el origen del objeto. Si nosotros queremos rotar un objeto y trasladar otro antes de trasladarlo llamaremos a la función de matriz de identidad para que reinicie el origen de este objeto. En OpenGL llamaremos a glLoadIdentity().
PILA DE MATRICES
A veces nos interesa guardar el estado de las transformaciones por lo que utilizar la matriz de identidad no nos sirve, para este caso opengl tiene las pilas de matrices, funcionan igual que una pila, para ello tenemos las funciones glPushMatrix que pone en la pila y glPopMatrix que la quita de la pila, por lo tanto si nosotros aplicamos una transformación a toda la escena y luego a un objeto queremos aplicarle otra lo podemos poner en la pila luego quitarlo de la pila y asi mantenemos la transformación inicial.
En el ejemplo que os podéis descargar si pulsáis el botón ‘sin pila’ deja de usar las funciones glPushMatrix y glPopMatrix. Entonces veréis como el cubo de la izquierda se le acumulan las 4 transformaciones y se mueve de diferente forma que utilizando la pila. Si volvéis a pulsar el botón para que use la pila lo que hace es aplicar 3 transformaciones la que esta fuera de la pila y las 2 que tiene en concreto dentro de la pila del segundo cubo
CONTACTENACION DE TRANSFORMACIONES
Si quemeros aplicar mas de una transformación a un objeto en concreto tenemos que tener muy claro que es lo que queremos, porque no es lo mismo primero rotar un objeto y luego trasladarlo que primero trasladarlo y luego rotarlo