Click here to load reader
Upload
angel-garcia
View
33
Download
0
Embed Size (px)
Citation preview
Practica 17Proyecciones
OBJETIVO: Aprender la diferencia entre Proyección en Perspectiva y Proyección
Ortográfica.
Conceptos
Concepto: Transformaciones
Definición: Son las que hacen posible la proyección de coordenadas 3D sobre superficies 2D.
Tipos: Transformación de ProyecciónTransformación del ObservadorTransformación del ModeloTransformación de Vista
Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL
Tipos de Transformaciones de Proyección
Concepto: Proyección Ortográfica
Definición: Una proyección ortográfica es cuadrada en todas sus caras. Esto produce una proyección paralela, útil para aplicaciones de tipo CAD o dibujos arquitectónicos, o también para tomar medidas, ya que las dimensiones de lo que representan no se ven alteradas por la proyección.
Nota: Sólo puede haber un tipo de proyección activo en el LIENZO.
La definición del tipo de Transformación de Proyección se hace comúnmente en init, puesto que es una acción que se realiza una sola vez.
Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL
Representación deProyección Ortográfica
Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL
Métodos:Definir el uso de Proyección Ortográfica
Método: gl.glOrthof(left, right, bottom, up, near, far);
Descripción: Método empleado en OpenGL para definir como transformación de proyección, la proyección ortográfica. La llamada a esta función sólo puede llevarse a cabo con éxito si se activa la matriz de proyección previamente con el comando [gl.glMatrixMode(GL2.GL_PROJECTION)], y se inicializa con la matriz de identidad [gl.glLoadIdentity()].
Parámetros: left, right Flotantes que describen los límites del eje X.
bottom, up Flotantes que describen los límites del eje Y.
near, far Flotante que describen los límites del eje Z.
Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL
Ejemplo de Uso de glOrthof(...)Descripción
Se muestra cómo se debe inicializar la proyección Ortográfica.
Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL
public void init(GLAutoDrawable glad) { GL2 gl = glad.getGL().getGL2(); gl.glClearColor(1.0f,1.0f,1.0f,0.0f);
gl.glMatrixMode(gl.GL_PROJECTION);
gl.glLoadIdentity();
gl.glOrthof(1.0f, 1.0f, 1.0f, 1.0f, 1.5f, 100.0f); gl.glMatrixMode(gl.GL_MODELVIEW); glu.gluLookAt(0,0,1.50,0,0,0, 0,1,0); }
Cambios en la matriz de transformación activa.
Ejemplo 1 de Uso de glOrthof(...)Descripción
Se procede a dibujar un Cuadro usando esta proyección, con las siguientes coordenadas.
Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL
public void display(GLAutoDrawable glad) { GL2 gl = glad.getGL().getGL2(); gl.glClear(GL2.GL_COLOR_BUFFER_BIT);
gl.glBegin(GL2.GL_QUADS); gl.glColor3f(1.0f, 0.0f, 0f); gl.glVertex3f(0.5f, 0.5f, 0.0f); gl.glVertex3f(0.5f, 0.5f, 0.0f); gl.glVertex3f( 0.5f, 0.5f, 1.0f); gl.glVertex3f( 0.5f, 0.5f, 1.0f);
gl.glEnd(); }
OBSERVE que no todos los vértices del cuadro
están en la misma coordenada en Z
Resultado Ejemplo 1Descripción
Este tipo de proyección no se ve afectado por la profundidad. En otras palabras sin importar cuan lejos esté el objeto, la dimensión aparente del mismo será siempre la misma.
Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL
Ejemplo 2 de Uso de glOrthof(...)Descripción
Se procede a dibujar ahora dos cuadros, misma longitud de lados, pero ubicados en diferentes coordenadas en Z.
Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL
public void display(GLAutoDrawable glad) { GL2 gl = glad.getGL().getGL2(); gl.glClear(GL2.GL_COLOR_BUFFER_BIT);
gl.glBegin(GL2.GL_QUADS); gl.glColor3f(1.0f, 0.0f, 0f); gl.glVertex3f(0.75f, 0.25f, 0.0f); gl.glVertex3f(0.75f, 0.25f, 0.0f); gl.glVertex3f(0.25f, 0.25f, 1.0f); gl.glVertex3f(0.25f, 0.25f, 1.0f); gl.glVertex3f( 0.25f, 0.25f, 10.0f); gl.glVertex3f( 0.25f, 0.25f, 10.0f); gl.glVertex3f( 0.75f, 0.25f, 5.0f); gl.glVertex3f( 0.75f, 0.25f, 5.0f);
gl.glEnd(); }
OBSERVE que no todos los vértices del cuadro
están en la misma coordenada en Z
Resultado Ejemplo 2Descripción
OBSERVE que a pesar de los cuadros difieren enormemente en el valor de su coordenada Z, la profundidad no afecta la dimensión, y siguen viéndose del mismo tamaño, característica de la Proyección Ortográfica.
Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL
Tipos de Transformaciones de Proyección
Concepto: Proyección Perspectiva
Definición: Una proyección perspectiva reduce y estira los objetos más alejados del observador. Es importante saber que las medidas de la proyección de un objeto no tienen por qué coincidir con las del objeto real, ya que han sido deformadas. Esta proyección es con la que habitualmente se relaciona nuestra visión.
Nota: Sólo puede haber un tipo de proyección activo en el LIENZO.
La definición del tipo de Transformación de Proyección (ortográfica o perspectiva) se hace comúnmente en init, puesto que es una acción que se realiza una sola vez.
Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL
Representación deProyección Perspectiva
Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL
OBSERVE la estructura piramidal, que da lugar a
la deformación en la imagen.
OBSERVE que se debe definir la posición de la
cámara convenientemente, para
visualizar el espacio especificado.
Métodos:Definir el uso de Proyección Ortográfica
Método: gl.glFrustum(left, right, bottom, up, near, far);
Descripción: Método empleado en OpenGL para definir como transformación de proyección, la proyección perspectiva. La llamada a esta función sólo puede llevarse a cabo con éxito si se activa la matriz de proyección previamente con el comando [gl.glMatrixMode(GL2.GL_PROJECTION)], y se inicializa con la matriz de identidad [gl.glLoadIdentity()]. También deberá situar uno el origen de la visión a través de la función [glu.gluLookAt(0,0,1.50, 0,0,0, 0.0,1.0,0);], la cuál se analizará como parte de la Transformaciones de Visión (o ubicación de la cámara), posteriormente.
Parámetros: left, right Valores flotantes que describen los límites del eje X.
bottom, up Valores flotantes que describen los límites del eje Y.
near, far Valores flotante que describen los límites del eje Z.
Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL
Ejemplo de Uso de glOrthof(...)Descripción
Se muestra cómo se debe inicializar la proyección perspectiva.
Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL
public void init(GLAutoDrawable glad) { GL2 gl = glad.getGL().getGL2(); gl.glClearColor(1.0f,1.0f,1.0f,0.0f);
gl.glMatrixMode(gl.GL_PROJECTION);
gl.glLoadIdentity();
gl.glFrustumf(1.0f, 1.0f, 1.0f, 1.0f, 1.5f, 100.0f); gl.glMatrixMode(gl.GL_MODELVIEW); glu.gluLookAt(0,0,1.50, 0,0,0, 0.0,1,0); }
Cambios en la matriz de transformación activa.
Ejemplo 1 de Uso de glFrustum(...)Descripción
Se procede a dibujar ahora dos cuadros, misma longitud de lados, pero ubicados en diferentes coordenadas en Z.
Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL
public void display(GLAutoDrawable glad) { GL2 gl = glad.getGL().getGL2(); gl.glClear(GL2.GL_COLOR_BUFFER_BIT);
gl.glBegin(GL2.GL_QUADS); gl.glColor3f(1.0f, 0.0f, 0f); gl.glVertex3f(0.75f, 0.25f, 0.0f); gl.glVertex3f(0.75f, 0.25f, 0.0f); gl.glVertex3f(0.25f, 0.25f, 1.0f); gl.glVertex3f(0.25f, 0.25f, 1.0f); gl.glVertex3f( 0.25f, 0.25f, 10.0f); gl.glVertex3f( 0.25f, 0.25f, 10.0f); gl.glVertex3f( 0.75f, 0.25f, 5.0f); gl.glVertex3f( 0.75f, 0.25f, 5.0f);
gl.glEnd(); }
OBSERVE que no todos los vértices del cuadro
están en la misma coordenada en Z
Resultado Ejemplo 2Descripción
OBSERVE que ahora, los cuadros reflejan la deformación derivada de la lejanía entre ellos, debido a los diferentes valores en la coordenada en Z.
Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL
P17. ProyeccionesDetalle
1. Usando proyección ortográfica, cree una aplicación en Java que dibuje los 4 Triángulos siguientes, y reporte el resultado: Triángulo 1: Vértice 1: (-4, -4, 0) Vértice 2: (-2, -4, 0) Vértice 3: (-3, -2, 0) Triángulo 2: Vértice 1: ( 2, -4, -10) Vértice 2: ( 4, -4, -10) Vértice 3: ( 3, -2, -10) Triángulo 3: Vértice 1: (-4, 2, -5) Vértice 2: (-2, 2, -5) Vértice 3: (-3, 4, -5) Triángulo 4: Vértice 1: ( 2, 2, -1) Vértice 2: ( 4, 2, -1) Vértice 3: ( 3, 4, -1)
Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL
P17. ProyeccionesDetalle
2. Cambie la proyección a perspectiva, y reporte el resultado.3. Manteniendo la proyección en perspectiva, agregue el triángulo,observe el resultado: Triángulo 5: Vértice 1: ( -1, -1, 1) Vértice 2: ( 1, -1, 1) Vértice 3: ( 0, 1, 1)4. Cambie la proyección a ortográfica, y observe el resultado, explique la razón por la cuál el quinto triángulo no aparece.5. Modifique los parámetros de la función glu.gluLookAt(), para hacer visible el quinto triángulo. Reporte.
Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL
FIN