19

Click here to load reader

P17 nelson proyecciones

Embed Size (px)

Citation preview

Page 1: P17 nelson proyecciones

Practica 17Proyecciones

OBJETIVO: Aprender la diferencia entre Proyección en Perspectiva y Proyección

Ortográfica.

Page 2: P17 nelson proyecciones

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

Page 3: P17 nelson proyecciones

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

Page 4: P17 nelson proyecciones

Representación deProyección Ortográfica

Source: 3D Computer Mathematics – A Mathematical Introduction to OpenGL

Page 5: P17 nelson proyecciones

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

Page 6: P17 nelson proyecciones

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.

Page 7: P17 nelson proyecciones

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

Page 8: P17 nelson proyecciones

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

Page 9: P17 nelson proyecciones

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

Page 10: P17 nelson proyecciones

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

Page 11: P17 nelson proyecciones

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

Page 12: P17 nelson proyecciones

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.

Page 13: P17 nelson proyecciones

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

Page 14: P17 nelson proyecciones

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.

Page 15: P17 nelson proyecciones

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

Page 16: P17 nelson proyecciones

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

Page 17: P17 nelson proyecciones

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

Page 18: P17 nelson proyecciones

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

Page 19: P17 nelson proyecciones

FIN