jueves, 4 de octubre de 2012

Glosario de terminos


Entornos CAVE: Cave Automatic Virtual Environment, entorno de realidad virtual inmersiva.

Obturador: Dispositivo que controla el tiempo durante el que llega la luz al dispositivo fotosensible.

Emisor RF: Emisor de radiofrecuencia, basa su funcionamiento en la emisión de una onda portadora modulada por una frecuencia musical.

GPU: Graphics Processing Unit, coprocesador dedicado al procesamiento de gráficos u operaciones de coma flotante, para aligerar la carga de trabajo del procesador central en aplicaciones como los videojuegos o aplicaciones 3D interactivas.

Graficos Quadro: Diseñadas y fabricadas especialmente para estaciones de trabajo profesionales, las GPUs NVIDIA Quadro son el motor de más de 150 aplicaciones profesionales utilizadas en campos tan variados como laproducción industrial, la producción audiovisual y el entretenimiento, las ciencias y la energía.


Transformaciones geometricas traslacion, rotacion y escalacion en OpenGL


2. Transformaciones Geométricas en OpenGL (traslación, rotación y escalación).

    *Traslación:
      glTranslatef(0.0f, 0.0f, 0.0f); //glTranslatef(unidadesdetrasladoen X, traslado en Y, traslado en Z);


    *Rotación: Rota en sentido contrario a las manecillas del reloj.
      glRotatef(0.0f, 0.0f, 0.0f, 0.0f); //ángulos en grados


    *Escalación: Nos permite expandir o contraer los objetos de un vértice.
      glScalef(0.0f, 0.0f, 0.0f);



3. Uso de matrices en OpenGL

*Matriz de proyección: Especifica el tamaño y la forma de volumen de visualizacion, el cual es aquel cuyo contenido es el que se muestra en pantalla. Está delimitado por una serie de planos de trabajo. Los planos más importantes sol los de corte porque acotan el volumen de visualizacion por delante y atras. En el plano más proximo a la cáamara, se proyecta la escena para después mostrarla en pantalla. Lo que está más adelante de la cámara, no se representa.


glMatrixMode(GL_PROJECTION);


*Matriz de modelado: Es una matriz de 4x4 que representa el sistema de coordenadas transformado que está siendo utilizado para colocar y orientar los objetos.


glMatrixMode(GL_MODELVIEW);



4. Operaciones con Matrices: Dibujando el Camino

A partir de las matrices de transformación y las coordenadas de modelado del objeto, se realiza la transformación de las coordenadas en OpenGL. Sin embargo, es necesario realizar la transformación de la coordenada de la posición actual de la tortuga para representar el trayecto que dibuja al desplazarse. De manera que se actúa directamente en la matriz de transformación.

*La Pila de Matrices
Existe una función denominada display() en la que se pueden encontrar las funciones de glPushMatrix() y glPopMatrix(), las cuales nos permiten guardar una determinada matriz en OpenGL para luego recuperarla.
glPushMatrix() saca una copia exacta de la matriz superior, llevándola encima de             la pila.
glPopMatrix() elimina la matriz superior, dejando en la parte alta de la pila a la matriz que estaba en el momento de llamar a la función glPushMatrix().
glGetDoublev() nos permite obtener la matriz actual de una de las pilas. A esta función se le indica la matriz que se requiere obtener, GL_MODELVIEW y un puntero de 16 posiciones donde se rellenaran los valores de la matriz.
Es necesario cargar la pila de matrices de GL_MODELVIEW, para utilizar la matriz mModel, luego de utilizar la función PushMatrix(), de manera que no se altere la matriz actual.         
glMultMatrixd() multiplica la matriz que se encuentra sobre la pila por la matriz que tiene como argumento. En este caso, al multiplicarse por la matriz identidad, mModel queda en el top de la pila.

Proyección orthogonal y perspectiva en opengl

El significado de las proyecciones.
OpenGL es una biblioteca gráfica para la creación de escenas 3D, pero finalmente, desde el ordenador nos asomamos a ese mundo 3D a través de una ventana en dos dimensiones. Al igual que en la analogía de la cámara fotográfica, debemos proyectar el mundo 3D sobre una vista 2D, bien sea la fotografía positivada, o como en nuestra caso, una ventana 2D (Tutorial).

Al llevar a cabo una proyección, cualquier objeto que caiga totalmente fuera del campo de vista, por ejemplo, los objetos que están a espaldas del observador, no apareceran en la proyección 2D. Y de aquellos objetos que caigan parcialmente dentro del campo de vista solo se proyectará las partes que al recortarse contra el volumen de la vista caigan dentro de él.


Proyección Ortogonal.

El tipo de proyección que hemos utilizado hasta ahora es una proyección ortogonal. Una proyección ortogonal define un volumen de la vista de tipo paralelepipédico tal y como se muestra en la siguiente figura. La principal característica de esta proyección es que el tamaño de los objetos es independiente de la distancia a la que estén del observador, por ejemplo, dos cilindros del mismo tamaño, uno a cinco unidades y el otro a diez unidades de distancia del observador se proyectarán con el mismo tamaño.



Para definir una proyección ortogonal en OpenGL hay que dar los siguiente pasos:
glMatrix(GL_PROJECTION); /* Voy a manejar la matriz de proyección */
glLoadIdentity(); /* Cargo inicialmente la identidad */
/* Y ahora defino la proyección ortogonal */
void glOrtho(izquierda, derecha, abajo, arriba, cerca, lejos);

Si lo que deseamos es trabajar con una proyección ortogonal 2D:
void gluOrtho2D(izquierda, derecha, abajo, arriba);

que no es más que una proyección ortogonal donde el plan delantero está en -1 y el trasero en 1.


Proyección perspectiva.
La proyección ortogonal no da sensación de profundidad porque el tamaño de los objetos no depende de su distancia al observador. Para conseguir este efecto necesitamos definir una proyección perspectiva. Esta proyección define un volumen de la vista que es una prisma truncado de base rectangular, como el de la siguiente figura:



la función OpenGL que establece este tipo de perspectiva es:
void glFrustum(izquierda, derecha, abajo, arriba, cerca, lejos);

este modo de definir la proyección perspectiva no es demasiado intuitivo, es más sencillo establecerla con un esquema como el que se muestra en la siguiente figura:



y la función OpenGL que la establece es:
void gluPerspective(fovy, aspecto, cerca, lejos);

donde fovy es el ángulo de apertura del objetivo de la cámara, en grados, y aspecto es la relación ancho/alto de la base de la pirámide.

jueves, 13 de septiembre de 2012


Glosario Unidad 2: Transformaciones

Coordenadas Homogeneas:  son un instrumento usado para describir un punto en el espacio proyectivo.  Pueden usarse como un sistema alternativo de coordenadas para trabajar en el espacio euclídeo, pues éste puede verse como un subconjunto del espacio proyectivo. De ese modo, las coordenadas homogéneas son ampliamente usadas en infografía para la representación de escenas en tres dimensiones.

Stack: Es una lista ordinal o estructura de datos en la que el modo de acceso a sus elementos es de tipo LIFO (del inglés Last In First Out, último en entrar, primero en salir) que permite almacenar y recuperar datos. Esta estructura se aplica en multitud de ocasiones en el área de informática debido a su simplicidad y ordenación implícita de la propia estructura.

Transformaciones Geometricas


2. Transformaciones geométricas

Un paquete gráfico permite al usuario especificar que parte de una imagen definida se debe visualizar y dónde esta parte se debe colocar en el dispositivo de visualización. Cualquier sistema de coordenadas que sea conveniente, referido al sistema de referencia de coordenadas del mundo, se puede usar para definir la imagen.

2.1. Transformaciones bidimensionales Traslación
Se aplica una traslación en un objeto para cambiar su posición a lo largo de la trayectoria de una línea recta de una dirección de coordenadas a otra. Convertimos un punto bidimensional al agregar las distancias de traslación, tx y ta la posición de coordenadas original (x ,y) para mover el punto a una nueva posición (x’, y’).
Los polígonos se trasladan al sumar el vector de traslación a la posición de coordenadas de cada vértice y se vuelve a generar el polígono utilizando un nuevo conjunto de coordenadas y vértices y las especificaciones actuales de los atributos.

Rotación
Se aplica una rotación bidimensional en un objeto al cambiar su posición a lo largo de la trayectoria de una circunferencia en el plano de xy  para generar una rotación, especificamos un ángulo de rotación θ y la posición (xr , yr) del punto de rotación (o punto pivote) en torno al cual se gira el objeto.

2.2. Coordenadas homogéneas y representación matricial
En las aplicaciones de diseño y de creación de imágenes, realizamos traslaciones, rotaciones y  escalaciones para ajustar los componentes de la imagen en sus posiciones apropiadas. En este tema consideramos cómo se pueden volver a formular las representaciones de la matriz de modo que se pueden procesar de manera eficiente esas secuencias de transformación.

2.3. Composición de transformaciones bidimensionales Traslaciones
Se se aplican dos vectores de traslación sucesivos (t x1, ty1) y (t x2 , t y2 ) en la posición de coordenadas P, la localización transformada final P, la localización transformada final P’se calcula como:
donde se representan P y P’ como vectores de columna de coordenadas homogéneas. Podemos verificar este resultado al calcular el producto de la matriz para las dos agrupaciones asociativas. Asimismo, la matriz de transformación compuesta para esta secuencia de transformaciones es:
que demuestra que dos transformaciones sucesivas son aditivas.

Rotaciones
Dos rotaciones sucesivas que se aplican en el punto P producen la posición transformada
Al multiplicar las dos matrices de rotación, podemos verificar que dos rotaciones sucesivas son aditivas:
de modo que es posible calcular las coordenadas giradas finales con la matriz de rotación compuesta como

Escalaciones
Concatenar matrices de transformación para dos operaciones de escalación sucesivas produce la siguiente matriz de escalación compuesta:

La matriz resultante en este caso indica que las operaciones de escalación sucesivas son multiplicativas. Es decir, si debiéramos triplicar el tamaño de un objeto dos veces en una sucesión, el tamaño final sería nueve veces el tamaño original.

Rotación del punto pivote general
Con un paquete gráfico que sólo ofrezca una función de rotación para girar objetos con respecto del origen de las coordenadas, podemos generar casi cualquier punto pivote seleccionado (x r , y r ) al realizar la siguiente secuencia de operaciones de traslación-rotación-traslación:
1. Traslade el objeto de modo que se mueva la posición del punto pivote al origen de  las coordenadas.
2. Gire el objeto con respecto del origen de las coordenadas.
3. Traslade el objeto de manera que se regrese el punto pivote a su posición original.


Escalación del punto fijo general
La siguiente figura ilustra una secuencia de transformación para producir escalación con respecto de una posición fija seleccionada (x f , y f ) al utilizar una función de escalación que sólo puede escalar en relación con el origen de las coordenadas.

1. Traslade el objeto de modo que el punto fijo coincida con el origen de las coordenadas.
2. Escale el objeto con respecto del origen de las coordenadas
3. Utilice la traslación inversa del paso 1 para regresar el objeto a su posición original.

Propiedades de concatenación
La multiplicación de matrices es asociativa. Para tres matrices cualesquiera A, B y C, el producto matricial A·B·C se puede llevar a cabo al multiplicar primero a por B o multiplicar primero B por C:
A·B·C =(A·B)·C =A·(B·C )

2.4.Transformación ventana-área de vista
Algunos paquetes gráficos permiten que el programador especifique coordenadas de primitivas de salida en un sistema de coordenadas de mundo de punto flotante, usando las unidades que sean relevantes para el programa de aplicación: angstroms, micras, metros, millas, años luz, etcétera. Se emplea el término de mundo porque el programa de aplicación representa un mundo que se crea o presenta interactivamente para el usuario:
Como las primitivas de salida se expresan en coordenadas de mundo, hay que indicar al paquete de subrutinas gráficas cómo establecer la correspondencia entre las coordenadas de mundo y las coordenadas de pantalla (usaremos el término específico coordenadas de pantalla para relacionar este análisis específicamente con SRGP, pero podrían usarse dispositivos de impresión, en cuyo caso sería más apropiado el término coordenadas de dispositivo).

2.5.Transformaciones de composición general y de eficiencia computacional
Una transformación bidimensional general, que representa una combinación de traslaciones, rotaciones y escalaciones. Solo necesitamos efectuar cuatro multiplicaciones y cuatro adiciones para transformar las posiciones de las coordenadas. Este es el número máximo de cálculos que se requieren para cualquier secuencia de transformación, una vez que se han concatenado las matrices individuales y evaluadas los elementos de la matriz compuesta. Sin concatenación, se aplicarían las transformaciones individuales una a la vez y se podría reducir en forma considerable el número de cálculos. De esta manera, una implementación eficiente de las operaciones de transformación consiste en formular matrices de transformación, concatenar cualquier secuencia de transformación y calcular las coordenadas transformadas

2.6.Representación matricial de transformaciones tridimensionales
Así como las transformaciones bidimensionales se pueden representar con matrices de3 X 3 usando coordenadas homogéneas, las transformaciones tridimensionales se pueden representar con matrices de 4 X 4, siempre y cuando usemos representaciones de coordenadas homogéneas de los puntos en el espacio tridimensional. Así, en lugar de representar un punto como (x, y, z ), lo hacemos como (x, y, z, W ), donde dos de estos cuádruplos representan el mismo punto si uno es un multiplicador distinto de cero del otro: no se permite el cuádruplo (0, 0, 0, 0). Como sucede en el espacio bidimensional, la representación estándar de un punto (x, y, z, W ) con W ≠ 0 se indica (x/W, y/W, z/W, 1).

2.7.Composición de transformaciones tridimensionales
El objetivo es transformar los segmentos de línea dirigida P1P2 y P1P3 en la figura 2.18 de su posición inicial en la parte (a) a su posición final en la parte (b). De esta manera, el punto P1 se trasladará al origen P 1P2 quedará en el eje positivo y P 1P3 quedará en la mitad del eje positivo del plano (x, y ). Las longitudes de las líneas no se verán afectadas por la transformación. Se presentan dos formas de lograr la transformación deseada. El primer método es componer las transformaciones primitivas T , R x , Ry y Rz . Este método, aunque es algo tedioso, es fácil de ilustrar y su comprensión nos ayudará en nuestro conocimiento de las transformaciones. El segundo método, que utiliza las propiedades de las matrices ortogonales especiales que se analiza en la sección anterior, se explica de manera mas breve pero es más abstracto.