Manipulación del Espacio: ransfoTrmaciones y...

Post on 11-Oct-2018

219 views 0 download

Transcript of Manipulación del Espacio: ransfoTrmaciones y...

Manipulación del Espacio: Transformaciones y Proyecciones

Facultad de Cs. de la Computación

Juan Carlos Conde Ramírez

Computer Graphics

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Contenido

1 Introducción

2 Transformaciones

3 Concatenación

4 Proyecciones

5 Conclusiones

1 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Contenido

1 Introducción

2 Transformaciones

3 Concatenación

4 Proyecciones

5 Conclusiones

2 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Objetivo

El objetivo de la computación grá�ca es crear una imagen bidimensional de unaescena 3D.

Tareas involucradas:

I Colocación de los objetos en la escena y animación de los mismos.

I De�nición de un punto de vista y una forma de visualización (volumen devisualización).

I Mapeo de coordenadas 3D en coordenadas 2D.

Se llevan a cabo mediante procesos de transformación y proyección.

3 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

4 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Contenido

1 Introducción

2 Transformaciones

3 Concatenación

4 Proyecciones

5 Conclusiones

5 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

¾Qué son? ¾Para qué sirven?

De�nición: modi�caciones aplicadas a los elementos que componen una escenatridimensional.

Utilidades:

I Alteración del contenido de una escena o de sus elementos (modelo)

I Cambio de la posición desde la que se percibe una escena (observador)

I Representación 2D de una imagen 3D (proyección y vista)

Aplicadas a un elemento del modelo, producen una modi�cación de los puntosque de�nen dicho elemento. Para ello se utilizan operaciones matriciales.

6 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Consideraciones

Coordenadas de la vista (oculares):

I Punto desde el cual el observador percibe el contenido de una escena, sinconsiderar las transformaciones.

I Se identi�can con las posiciones absolutas de un objeto en la pantalla.

Trasformación = modi�cación del sistema de coordenadas

7 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Sistema de Coordenadas

Las modi�caciones del sistema de coordenadas se recogen en una matriz especial:matriz del modelador

8 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Tipo de Transformaciones

Del observador:

I Utilizadas para de�nir el punto de vista

Del modelo

I Rotaciones, traslaciones, escalado, re�exiones...

I Sus efectos se recogen en una matriz especial (matriz del modelador)

De la proyección

I De�nición de la forma de visualización (ortogonal o perspectiva)

De la vista

I Para eliminar objetos que quedan fuera del volumen de visualización ygenerar imágenes 2D.

9 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Proceso 2D → 3D

10 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Transformaciones: características

I Tienen un efecto acumulador

I Necesario mantener �estados visitados�

I Se utiliza la matriz identidad para volver al inicio

void glLoadIdentity(void);

I Pilas de matrices:permiten mayor �exibilidad

void glPushMatrix(void);

void glPopMatrix(void);

11 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Translación + Rotación VS Rotación + Traslación

12 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Transformaciones del MODELO I

Rotación: operación de giro de elementos alrededor de ejes arbitrarios.

Operación matricial:r ′xr ′yr ′z1

=

cos θ −sin θ 0 0sin θ cos θ 0 00 0 1 00 0 0 1

rxryrz1

Ángulos positivos: giros anti-horarios

Primitivas OpenGL:void glRotated(GLdouble angulo, GLdoublex, GLdoubley, GLdoublez);

void glRotatef(GLfloat angulo, GLfloatx, Glfloaty, GLfloatz);

13 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Transformaciones del MODELO II

Traslación: movimiento de un elemento a lo largo de un eje de coordenadas.

Operación matricial: r ′xr ′yr ′z1

=

1 0 0 tx0 1 0 ty0 0 1 tz0 0 0 1

rxryrz1

Primitivas OpenGL:void glTranslated(GLdoublex, GLdoubley, GLdoublez);

void glTranslatef(GLfloatx, GLfloaty, GLfloatz);

14 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Transformaciones del MODELO III

Escalamiento: alteración de las dimensiones de un elemento.

Operación matricial: r ′xr ′yr ′z1

=

sx 0 0 00 sy 0 00 0 sz 00 0 0 1

rxryrz1

Dos tipos: uniforme (3 ejes simultáneos), no uniforme (cualquier eje)

Primitivas OpenGL:void glScaled(GLdoublex, GLdoubley, GLdoublez);

void glScalef(GLfloatx, Glfloaty, GLfloatz);

15 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Actividad 1

Objetivo: Aplicar las transformaciones estudiadas en clase y comprobar como funcionan en lapráctica

Instrucciones:

1. Traza en una hoja cuadriculad un plano coordenado en 2 Dimensiones

2. Asume que el Eje Z existe pero es siempre 0

3. Dibuja un triángulo no muy grande donde cada uno de sus vértices este sobre lasintersecciones de la cuadrícula

4. Considera el valor de cada cuadro como una unidad

5. Determina las coordenadas de cada uno de sus vértices

Ahora determina lo siguiente:

1. Una magnitud ∆x o ∆y (congruente con las medidas de tu plano) para trasladar eltriángulo a otra posición del plano.

2. Un ángulo entre 1◦ y 180◦ para girar el triángulo en sentido anti-horario sobre el eje Z.

3. Un factor de tamaño que esté en [0,1] (es decir entre 0% y 100%) para determinar elescalamiento del triángulo.

Aplica por separado las 3 transformaciones anteriores a cada uno de los vértices y re-dibuja enel mismo plano de cada transformación la nueva �gura.

16 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Actividad 2

Usando las coordenadas del origen (0, 0, 0) como centro o centroide del triángulo anteriorrealiza lo siguiente:

1. Ubicar las nuevas coordenadas en el plano.

2. Aplica una rotación de 45◦ sobre el eje Z.

3. Al nuevo triángulo aplica una traslación de más de 3 unidades.

4. Invierte los pasos anteriores y observa el resultado.

Contesta las siguientes preguntas:

I ¾Qué transformación debe realizarse para hacer más grande a una �gura?

I ¾Qué factor de escalamiento debe utilizarse si se desea modi�car el tamaño de una �guraexactamente al doble?

I ¾Qué observaciones puede hacer con respecto al orden de las transformacionesTraslación + Rotación contra Rotación + Traslación?

17 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Contenido

1 Introducción

2 Transformaciones

3 Concatenación

4 Proyecciones

5 Conclusiones

18 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Concatenación de Transformaciones

Deseamos ahora aplicar múltiples transformaciones de forma simultánea a undeterminado objeto geométrico:

I Para hacerlo tenemos que concatenar una detrás de otra, todas las matricespor las que sus vértices deben multiplicarse.

I La multiplicación de matrices NO es conmutativa. El orden de las matricesSI afecta el resultado �nal.

19 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Convenciones de Multiplicación

Existen dos convenciones en cuanto al uso de transformaciones geométricas:

1. En gra�cación, se post-multiplican las matrices. Los puntos se toman comovectores columna que se multiplican a las matrices por la derecha. Ademásel orden de las transformaciones, de primera a última, es de derecha aizquierda.

2. En robótica, se pre-multiplican las matrices. Los puntos se toman comovectores �la que se multiplican a las matrices por la izquierda, las matrices seordenan de izquierda a derecha de acuerdo al orden de las transformaciones.

20 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Convenciones de Multiplicación

Donde Pf es el punto �nal transformado, Pi el inicial, T1 la primera transfor-mación, T2 la segunda, etc.

En ambos casos tenemos que multiplicar las matrices de izquierda a derecha.

21 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Implementación

En OpenGL toda la geometría se ve afectada por la CTM (Current Transforma-

tion Matrix) o matriz de transformación actual.

Esta matriz guarda la información sobre todas las matrices que se han ido acu-mulando.

Cualquier vértice que pase por el pipeline, será multiplicado por esta matriz yconsecuentemente transformado.

22 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Implementación

En OpenGL, la CTM se compone de dos matrices:

I la matriz Modelview (matriz de transformación)

I la matriz Projection (matriz de proyección)

Ambas se concatenan y de su producto se crea la CTM para el pipeline quecontrola OpenGL.

23 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Implementación

Lo primero que debe hacerse es inicializar la matriz. Esto se hace cargando lamatriz identidad (elemento neutro de la multiplicación de matrices).

Con esto aseguramos de �limpiarla� por completo antes de añadir transforma-ciones. De no hacerlo se corre el riesgo de añadir transformaciones a otras yaexistentes (resultados indeseados).

Es decir:

1. glMatrixMode(GL_MODELVIEW) activa la matriz de transformación.

2. glLoadIdentity() cargamos la matriz identidad.

24 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Implementación

Después de esto, podemos acumular transformaciones sucesivas mediante lasfunciones:

I Escalar según sean los factores sx , sy y sz .

I Trasladar según los factores tx , ty y tz .

I Rotar el ángulo según el eje que de�ne el vector [vx , vy , vz].

A medida que vamos de�niendo transformaciones, se acumulan post-multiplicandoen la matriz de transformación.

25 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Implementación

En OpenGL, la regla es que la matriz de transformación que se ha de�nido alúltimo será la primera en aplicarse a la geometría.

La matriz de transformación debe entenderse como una pila. Cada transforma-ción que añadimos entra a la pila como la última y por lo tanto al salir será laprimera.

Podemos salvar el estado de la pila en cualquier momento para recuperarlodespués.

26 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Concepto de pila o �stack�

I glPushMatrix() salva el estado actual de la matriz

I glPopMatrix() recupera el estado de la matriz

Esto nos servirá en el caso de que tengamos que aplicar algunas transformacionesa una pequeña parte de la geometría. El resto no se debe ver afectado por esoscambios.

27 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Concepto de pila o �stack�

Lo que se hace es:

1. De�nir las transformaciones generales que afectan a todos.

2. Entonces se salva la matriz y se añaden otras.

Es posible dibujar una geometría �especial� e inmediatamente después serecupera la matriz.

Así podemos dibujar el resto de la geometría, ya que no se verá afectada porlas transformaciones que hayamos de�nido entre el Push y el Pop.

28 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Ejemplo Código/Matriz

29 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Contenido

1 Introducción

2 Transformaciones

3 Concatenación

4 Proyecciones

5 Conclusiones

30 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

De�nición

Los objetos en 3D se proyectan en un plano de visión 2D para representarlos enpantalla.

Métodos para generar vistas de objetos 3D:

I Proyección Ortográ�ca

I Proyección Perspectiva (cónica)

31 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Proyección Ortogonal I

I De�ne un volumen de visualización rectangular, cuyo tamaño no cambiade un extremo a otro.

I Se proyectan puntos de la super�cie de los objetos a lo largo de líneasparalelas sobre el plano de despliegue.

I Se especi�ca a partir de un vector que de�ne la dirección de las líneas deproyección.

32 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Proyección Ortogonal II

I Representa dimensiones exactas de los objetos → representación POCOrealista del aspecto del objeto 3D.

I Utilizada para representar objetos a partir de vistas que conservan las pro-porciones relativas → diseños arquitectónicos y de ingeniería.

I Tipos de proyecciones paralelas: Ortogonal y Oblicua.

33 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Proyección Ortogonal III

I La Proyección paralela ortogonal es perpendicular al plano de visión:

xp = x , yp = y

I Utilizadas para generar las vistas frontal, lateral (elevaciones) y superior(vista de planta) de los objetos.

34 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Proyección ParalelaORTOGONAL

Axonométrica: Se obtiene cuando el plano de proyección no es paralelo a ningunode los tres ejes principales del objeto.

Isométrica: Se obtiene cuando los tres ángulos que forman los ejes axonométricosson iguales.

35 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Proyección ParalelaOBLICUA

Matriz de proyección paralela:

1 0 L1 cosφ 00 1 L1 sinφ 00 0 1 00 0 0 1

Proyección no perpendicular al plano de visión:

xp = x + z(L1 cosφ)yp = y + z(L1 sinφ)

36 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Proyección ParalelaOBLICUA

Proyección caballera (α = 45◦): todas las líneas perpendiculares al plano deproyección se proyectan sin alterar su longitud.

Proyección de gabinete (α ≈ 63◦): las líneas perpendiculares a la super�cie devista se proyectan alterando su longitud a la mitad.

37 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Proyección Paralela: ORTOGONAL VS OBLICUA

38 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Primitivas OpenGLProyecciones Ortográ�cas

void glOrtho(GLdouble izquierda, GLdouble derecha, GLdouble abajo,

GLdouble arriba, GLdouble cerca, GLdouble lejos)

Sus argumentos de�nen la ventana de visualización y los planos de corte, cercanoy lejano. Si el objeto sobrepasa dichos planos, se recortará automáticamente.

void gluOrtho2D(GLdouble izquierda, GLdouble derecha, GLdouble abajo,

GLdouble arriba)

Proyecta una imagen 2D a una pantalla bidimensional. Todas las coordenadas zson 0.

39 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Proyección en Perspectiva I

I Representación realista del aspecto del objeto 3D → NO conserva lasproporciones relativas de los objetos.

I Utilizada en animaciones y aplicaciones que requieren algún grado derealismo.

I En objetos del mismo tamaño, la proyección de los más próximos al planoes mayor que la de los más alejados.

40 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Proyección en Perspectiva II

I Se proyectan los puntos del objeto hacia el plano de despliegue a lo largode líneas que convergen en un punto (centro de proyección)

I La vista que se proyecta de un objeto se de�ne calculando la intersecciónde las líneas de proyección con el plano de visión.

41 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Proyección en Perspectiva III

Punto de fuga: punto en el que converge un conjunto de líneas paralelas que seproyecta. (Parece que convergen hacia un punto lejano en el fondo).

Punto de fuga principal: líneas paralelas a uno de los ejes principales de unobjeto.

Las proyecciones en perspectiva se clasi�can como de uno, dos o tres puntos defuga principales.

42 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Proyección en Perspectiva IV

I El volumen de visualización es un frustum de una pirámide.

43 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Primitivas OpenGLProyecciones en Perspectiva

void glFrustum(GLdouble izquierda, GLdouble derecha, GLdouble abajo,

GLdouble arriba, GLdouble cerca, GLdouble lejos)

Como argumentos se especi�can las coordenadas y distancias entre los planosde trabajo de corte frontal y posterior. El volumen de visualización se usa pararecortar los objetos que se encuentran fuera de él.

void gluPerspective(GLdouble angulo, GLdoubleaspecto,

GLdouble zfrontal, GLdouble zPosterior)

Como argumentos se especi�ca el ángulo de apertura, la relación entre el largoy ancho del plano cercano y la distancia entre el punto de visión y los planoscercano y alejado.

44 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Planos Adicionales de Recorte

I Para restringir más el volumen de visualización, se pueden de�nir 6 planosadicionales de recorte.

I Volumen de vista resultante: intersección entre el volumen de vista inicialy cada uno de los espacios intermedios de�nidos por los planos de recorte.

45 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Primitivas de OpenGLPlanos de Recorte

glClipPlane(GLenum numero_plano, const GLdouble *ecuacion) Como ar-

gumentos se especi�can la matriz con las coordenadas que de�nen el plano derecorte y un número entero que indica qué plano de recorte se está de�niendo.

glEnable(GL_CLIP_PLANEi)

Habilita el plano de recorte i.

glDisable(GL_CLIP_PLANEi)

Deshabilita el plano de recorte i.

glGetIntegerv(GL_MAX_CLIP_PLANES)

Determina el número de planos de recorte que se soportan.

46 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Transformaciones y Proyecciones

TAREA

PROGRAMA. Aplicar transformaciones básicas utilizando el API de OpenGL.El programa debe cubrir los siguientes puntos:

1. Hacer una copia de la práctica No. 2 para reutilizar su código.

2. Borrar toda la primera sección correspondiente a "OPERACIONES CONLA MATRIZ DE TRANSFORMACIÓN"

3. Borrar las variables y funciones relacionadas con la sección borrada de lafunción displayFcn

4. Utilizar glTranslatef, glRotatef o glScalef para aplicar las transformacionescorrespondientes

5. Utiliza glPushMatrix y glPopMatrix si es necesario.

SUGERENCIA: Trazar la triángulo original tomando a la coordenada (0, 0, 0)como centroide, posteriormente aplica la transformación correspondiente paramoverlo y también a sus copias.

47 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Contenido

1 Introducción

2 Transformaciones

3 Concatenación

4 Proyecciones

5 Conclusiones

48 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

Transformaciones → Proyecciones

I OpenGL simpli�ca el proceso de transformación de elementoscon ayuda de:

1. Matrices que �almacenan� la posición del sistema de coordenadas.

2. Primitivas de alto nivel que abstraen al usuario de complejasoperaciones matriciales.

3. Estructuras como pilas de matrices para controlar los estadospor los que pasa el sistema de coordenadas.

I Es relativamente fácil crear varias vistas o proyecciones de unaescena en función de las necesidades del usuario

49 / 50

Introducción Transformaciones Concatenación Proyecciones Conclusiones

�El éxito no es el �nal, el fracaso no es la ruina, elcoraje de continuar es lo que cuenta�

[Winston Churchill]

Juan Carlos Conde Ramírezjuanc.conde@cs.buap.mx

50 / 50