Sunteți pe pagina 1din 11

INSTITUTO TECNOLGICO DE ACAPULCO

MATERIA: GRAFICACIN
AULA: 7-LA
HORA: 15:00-16:00 PM

MAESTRO: JAVIER SANCHEZ PADILLA

UNIDAD 3:
ALUMNO:
DIMAYUGA LUNA NOEL EDUARDONo.C:08321085






Introduccin
Las transformaciones son un aspecto bsico de la programacin grfica, especialmente las
transformaciones afines. Se pueden separar bsicamente en tres grandes grupos: las
rotaciones, las translaciones y el escalado.
El objetivo de este artculo es estudiar cmo es posible realizar una o ms transformaciones
sobre los objetos que componen una escena.
Existen tareas en las cuales las transformaciones son de suma importancia o pueden resultar
muy tiles:
A la hora de crear imgenes y formas es posible hacer uso de las transformaciones
(sobre todo rotaciones y translaciones). Tomando como base una forma simplificada
o un fragmento de figura, y mediante operaciones repetidas de copia de este
segmento con diferente inclinacin y posicin, se genere una imagen de una
complejidad muy superior a la del patrn.
Otro caso en el que las transformaciones son muy tiles (aunque quiz se pueda
interpretar como una simplificacin del ejemplo anterior), consiste en crear una
imagen a base de algunos pequeos fragmentos que se repiten. En esta ocasin
nicamente sera necesario aplicar la translacin e ir copiando los patrones en la
imagen que estamos creando.
Las transformaciones no solo son tiles a la hora de crear imgenes y objetos, si no
que tambin representan una valiosa herramienta a la hora de crear escenas
animadas. Imaginemos una escena formada por varios objetos. Estos objetos en
principio tienen una posicin fija, pero nuestro objetivo es crear una animacin a
partir de ellos. Gracias a las ellas es posible mover unos objetos respecto de los
dems. De esta forma, segn se vayan generando las imgenes de la animacin, los
objetos se transformarn y por lo tanto nuestra escena ya estar animada.
Por lo general, los objetos de las escenas son creados alrededor del origen de coordenadas,
y posteriormente son colocados mediante translaciones a la posicin final deseada.
Como ya se ha comentado, las transformaciones afines son las ms famosas dentro del
mundo de los grficos por ordenador. En ellas es muy sencillo realizar las operaciones de
escalar, rotar y trasladar. Otra de las grandes ventajas con las que cuenta, reside en que es
posible compactar varias transformaciones en una nica que incluya los efectos de todas
ellas.
Hay que destacar que todas las tareas que se van a realizar en esta etapa del curso
concernientes a transformaciones harn uso de matrices. Como veremos, estas matrices no
tienen nada de especial, son simples conjuntos de nmeros dispuestos en filas y columnas.
Los puntos en el espacio se definen normalmente como un conjunto de tres nmeros, as
que en principio este tipo es un aspirante ideal a ser representado por una matriz.
Por ejemplo, tenemos un par de puntos A y B (en 2D) con coordenadas Ax, Ay y Bx, By
respectivamente. Ambos pueden ser presentados en una matriz 1x2 con sus coordenadas,
pero en nuestros ejemplos se representarn en matrices 1x3 ya que como veremos
posteriormente OpenGL utiliza este tipo de matrices para representar los puntos. De esta
forma, A estara representada por una matriz con la forma {Ax, Ay, 1} y B por {Bx, By,
1}.
Ahora supongamos que nuestro objetivo es teniendo nicamente el punto A transformarlo
para obtener el punto B; para ello es necesario una matriz de transformacin, que
multiplicada por el punto A nos har obtener el punto B.
Transformaciones 2D
Translaciones
Esta transformacin es utilizada cuando deseamos mover una imagen de una posicin a otra
de la pantalla. La matriz de transformacin que hay que aplicar para obtener un movimiento
de Mx en el eje X y de My en el eje Y es:
Esta transformacin en muy simple y puede ser llevada a cabo sin necesidad de multiplicar
las matrices con el punto y la transformacin: basta simplemente con sumarle a cada
componente de la matriz el desplazamiento que se desea transladar.




Escalado
El escalado aumenta o disminuye las dimensiones de una imagen. La escala aplicada no
tiene por que producir a la fuerza una nueva imagen ms grande o ms pequea
proporcional a la original. Es esta caso (2D), encontramos dos factores que espeficican la
cantidad en la que se ha a escalar el eje X y en el eje Y. A estos dos factores les llamaremos
Ex y Ey. nicamente en caso de que ambos factores coincidan la imagen resultante ser
proporcional a la original.
En el caso de que un factor de escalado sea igual a 1, esa dimensin de la imagen
permanecer con las mismas dimensiones en la imagen final producida tras la aplicacin de
la transformacin de escalado.



Inclinaciones
Al igual que en las transformaciones por escalado, las transformaciones por inclinacin
tambin dependen de dos factores. En este caso, estos dos factores representan la
inclinacin producida tanto por el eje X como por el eje Y (Ix e Iy).
La matriz de transformacin por X se compone de:

Y la matriz para inclinar el eje Y:


Rotaciones
Las rotaciones constituyen otro tipo de transformacin muy utilizadas en los grficos por
ordenador. Los puntos sobre los que se aplica desplazarn y rotarn respecto a un punto
determinado.
La matriz de transformacin, en caso de que la rotacin se realice girando alrededor del
origen de coordenadas, tiene la siguiente forma:


siendo 'o' el ngulo que se desea rotar.
En caso de que la rotacin no vaya a realizarse tomando como eje de giro el origen de
coordenadas, es necesario encadenar una serie de transformaciones. Supongamos que la
rotacin se va a realizar con el eje de giro en un punto P de coordenadas Px, Py. En primer
lugar es necesario desplazar el punto con el vector {-Px, -Py}. A continuacin, hay que
realizar la rotacin al igual que en el caso anterior. Y por ltimo, deshacer la primera
translacin.


Transformaciones 3D
Todos los principios aplicables a las transformaciones 2D tambin son vlidos en las
transformaciones 3D. Ahora bien, las matrices son ligeramente ms complejas y quiz haya
casos en los que no resulte tan intuitivo como en las transformaciones en el plano.
En este caso tambin se presentarn los puntos mediante matrices. Un punto A con
coordenadas Ax, Ay y Az respecto de los ejes X, Y y Z se representa mediante la siguiente
matriz: {Ax, Ay, Az, 1}.
Translaciones
El caso de las translaciones en el espacio es idntico al de las translaciones en el plano.

En esta ocasin tambin es posible realizar el desplazamiento sin necesidad de multiplicar
por la matriz de transformacin, basta simplemente con sumar a cada coordenada del punto
el desplazamiento en el eje correspondiente que se desea realizar.
Escalado
Al igual que en el caso anterior, el escalado 3D no es ms que una extensin del de dos
dimensiones. Existen tres factores de escalado, uno para cada eje: Ex, Ey y Ez.

Al igual que en el escalado bidimensional: Si los tres factores son iguales la imagen
resultante guardar proporcionalidad con la original. En el caso especial de que los tres
factores tengan valor 1, la imagen no sufrir cambios.
Rotaciones
La rotacin 3D puede que no resulten tan simples de ver como las 2D.
Antes de nada, es necesario aclarar como se realizan este tipo de rotaciones. En este caso, al
disponer de 3 ejes de coordenadas podemos realizar tres tipos de rotaciones: una rotacin
en el eje X, en el eje Y o en el eje Z.
Por ejemplo, una rotacin en el eje X quiere decir que se realiza la rotacin moviendo el eje
Y hacia el eje Z, de forma que el X permanece inmvil.
Las matrices de transformacin para las rotaciones 3D de un ngulo 'o' son las siguientes:
Para rotaciones en el eje X:


En el eje Y:


Y, en el eje Z:


Transformaciones en OpenGL
Despus de presentar la teora fundamental de las transformaciones, se introducir el
sistema de trabajo de OpenGL respecto de las transformaciones.
Segn este sistema, desde el momento en el cual se especifican las coordenadas de un
elemento de una escena, hasta el momento que se realiza la representacin final en la
pantalla, OpenGL realiza cinco transformaciones:
Transformacin del observador
Transformacin del modelado
Transformacin del modelador
Transformacin de la proyeccin
Transformacin de la vista

Transformaciones del observador
Esta es la primera transformacin que OpenGL va a realizar sobre cualquier escena. Su
objetivo es emplazar el punto de vista del observador sobre el espacio de coordenadas 3D y
orientarlo en la posicin que corresponda. Por defecto el punto de vista del observador se
coloca en el origen de coordenadas (0,0,0) y la direccin apunta hacia el eje negativo de las
Z, aunque estos valores son totalmente variables y queda de la mano del programador el
elegir nuevos puntos y/o direcciones.
Es muy importante tener en cuenta que al ser la primera transformacin que se realiza, las
siguientes transformaciones son totalmente dependientes de los valores de esta
transformacin inicial.
Transformacin del modelo
Este tipo de transformaciones se aplican sobre los objetos que componen una escena. En
este punto es donde se pueden aplicar cualquiera de las transformaciones estudiadas
anteriormente (escalado, rotacin y translacin) sobre los objetos de una escena.
Hay que destacar que, en caso de que se apliquen varias transformaciones sobre un objeto,
es muy importante el orden en que se realicen. El resultado puede variar drsticamente si
cambia el orden de aplicacin de las transformaciones.
Por ejemplo: A un objeto se le desean aplicar transformaciones de escalado, rotacin y
translacin. Si se sigue este orden de aplicacin, el resultado es totalmente distinto a aplicar
las transformaciones con el siguiente orden: translacin, rotacin y escalado.
Por que sucede esto?. La explicacin se encuentra en el orden en que OpenGL aplica las
transformaciones. Como se ha comentado anteriormente, la transformacin del observador
es la primera en aplicarse, y sus efectos son vlidos para las siguientes transformaciones:
Transformaciones del modelador
Esta transformacin es bsicamente igual que la transformacin del modelo. En este caso se
va a trabajar con un objeto virtual de la escena que representa al observador. A todos los
efectos es lo mismo mover un objeto hacia delante, que el sistema de coordenadas hacia
atrs.
Transformaciones de proyeccin
En esta transformacin se especifica el volumen de visualizacin de la escena. Como se ha
comentado anteriormente, hay que tener en cuenta el orden de aplicacin de las
transformaciones. Esta transformacin se realizar sobre la orientacin que se haya dado
hasta el momento al modelador.
Mediante esta transformacin se especifica como se tiene que ver la imagen en la pantalla.
Una vez que se ha descrito toda la escena, todava queda la generacin final de la imagen,
lo que incluye la proyeccin del espacio 3D descrito en una imagen bidimensional. Hay dos
forma de realizar esta proyeccin:
Proyeccin ortogonal: La imagen final contiene los objetos con las mismas
dimensiones con las que se encuentran especificados en la escena. Esta proyeccin
es til para programas de diseo, pero no suele ser utilizada en la programacin de
juegos o programas que requieran una representacin lo ms realista posible de una
escena.
Proyeccin en perspectiva: Este tipo de proyeccin juega con el tamao de los
objetos con el fin de crear una escena lo ms realista posible. Los objetos ms
distantes del punto de vista del observador aparecern ms pequeos en la imagen
final. De esta forma se crea una ilusin de profundidad sobre una superficie 2D. Y
lo ms importante de todo, toda esta tarea la desarrolla OpenGL sin necesidad de
que el programador tenga que calcular cuanto ms pequeo se tiene que ver cada
objeto, o como dibujar un par de lnea paralelas en perspectiva. Una vez
especificada la escena y el tipo de proyeccin el programador queda libre de la tarea
de estos clculos.

Transformaciones de la vista
Esta transformacin ya se estudi en profundidad en la segunda entrega del curso.
Una vez que OpenGL ha generado una imagen bidimensional con la representacin de la
escena, hay que mapear esta imagen sobre alguna ventana de la pantalla (o sobre la pantalla
al completo). Esta es la ltima transformacin que realiza OpenGL; llegados a este punto la
imagen generada ya se encuentra dibujada sobre la pantalla del ordenador.
Funciones de transformacin en OpenGL
Hasta el momento se ha estudiado el sistema de transformacin de OpenGL desde un punto
de vista terico. En este apartado se estudiarn las funciones de transformacin de la
librera de OpenGL.
En primer lugar, y antes de comenzar a estudiar las funciones en concreto, hay que ver
como se trabaja con las transformaciones. Ms concretamente, cmo se aplican las
transformaciones.
Por ejemplo, nuestro objetivo es emplazar un objeto concreto, con unas caractersticas
concretas, en la escena. En un principio, para que nuestro objeto tenga las caractersticas
deseadas, hay que crear la matriz de transformacin para multiplicarla por la matriz del
modelador. Una vez que la matriz de modelador contiene los valores deseados, es hora de
crear un objeto. De esta forma, cuando al crearse, ya se habr visto modificado por la
matriz actual del modelador, y por lo tanto tendr las propiedades deseadas.
Funciones de translacin
La funcin encargada de generar matrices de transformacin para la translacin es
glTranslatef. El prototipo de esta funcin es el siguiente:
void glTranslate (GLfloat x, GLfloat y, GLfloat x)
Los tres parmetros especifican la cantidad que se va a desplazar en cada uno de los ejes de
coordenadas.
Aparte de generar la matriz, glTranslatef tambin la aplica. Como podemos ver no devuelve
ningn tipo de valor, de no ser as, la forma de trabajo sera menos ptima.
Funciones de rotacin
Al igual que con las translaciones, OpenGL dispone de una funcin que genera y aplica
matrices de transformacin para la rotacin: glRotatef. El prototipo de la funcin es el
siguiente:
void glRotatef (GLfloat angulo, GLfloat x, GLfloat y, GLfloat z)
El primer argumento espeficica el ngulo que se ha de rotar (en grados). Los siguiente tres
argumentos espeficican el vector sobre el que se va a rotar. De esta forma es posible
realizar rotaciones sobre cualquier eje de giro con un coste mnimo.
Adems de glRotatef, OpenGL dispone de otra funcin muy similar: glRotated. El objeto y
funcionamiento son exactamente iguales a los de glRotatef, pero en este caso el prototipo
de la funcin es el siguiente:
void glRotatef (GLdouble angulo, GLdouble x, GLdouble y, GLdouble z)
Funciones de escalado
En este caso las funciones de escalado son las siguientes: glScalef y glScaled.
void glScalef (GLfloat x, GLfloat y, GLfloat z)
void glScaled (GLdouble x, GLdouble y, GLdouble z)
Los tres argumentos de estas funciones representan los factores por los que se van a
multiplicar cada una de sus tres dimensiones.
Por ltimo hay que comentar que el programador puede optar por hacer uso, o no, de estas
ultimas funciones. En OpenGL se ha contemplado la posibilidad de que las matrices de
transformacin en algn caso se puedan generar a mano por el programador.
Una vez que se ha creado una matriz de transformacin, hay que cargarla sobre la matriz de
transformacin de OpenGL mediante una de estas dos funciones: glLoadMatrixf o
glMultMatrixf.
La primera de ellas sobrescribe la matriz de transformacin actual con la que se le provee
por parmetro. Y la segunda, se multiplica la matriz actual por la que se pasa por
parmetro.
La matrices se pueden definir de dos formas diferentes:
Como un array de 16 elementos (recordemos que se trata de matrices de 4x4): GLfloat
M[16]
Como un array de 4x4 elementos: GLfloat M[4][4]
En ambos casos hay que tener en cuenta que OpenGL espera matrices definas por
columnas, es decir:

Los prototipos de las funciones son los siguientes:
void glLoadMatrixd (const GLdouble* matriz)
void glLoadMatrixf (const GLfloat* matriz)
y
void glMultMatrixd (const GLdouble* matriz)
void glMultMatrixf (const GLfloat* matriz)


Conclusin
A lo largo de artculo se ha presentado la teora fundamental que apoya el sistema de
transformaciones en el que se basa OpenGL. A lo largo de los siguientes artculos el lector
podr comprobar como todo este sistema de transformaciones es bsico para la
programacin de aplicaciones 3D, y en principio es una forma muy rpida de trabajar. En la
siguiente entrega del curso se presentarn algunos ejemplos reales de utilizacin de las
transformaciones as como el manejo de la pila de transformaciones.

S-ar putea să vă placă și