Graficacion (1)Graficacion (1).pdf

download Graficacion (1)Graficacion (1).pdf

of 181

description

Graficacion (1).pdf

Transcript of Graficacion (1)Graficacion (1).pdf

  • UMSNHFacultad de Ing. Elctrica

    Carrera: Ingeniera en ComputacinMateria: Graficacin

    Dr. Jos Antonio Camarena Ibarrola

    Septiembre de 2010

  • Introduccin

    Aplicaciones: Simulacin

  • Introduccin

    Video-juegos

    http://www.acclaim.com/games/crazytaxi/

  • Introduccin

    Animacin por computadora

    http://www.pixar.com

  • Introduccin

    Diseo (recorridos virtuales 3D)

    The William gates Buildinghttp://www3.arct.cam.ac.uk/westC/cl/cl.html

  • Introduccin

    Visualizacin de grficas 3D

    Convective modelling group, AOS, UnivIllinois at Urbana-Champaignhttp://redrock.ncsa.uiuc.edu/AOS/home.html(NCSA storm model)

  • Introduccin

    Interfaces en la medicina

    The Sonic Flashlight, MRT Center, The Robotics Institute,Carnegie Mellon University, http://www.ri.cmu.edu/projects/project_438.html

  • Primitivas de Grficacin

    Algoritmos de trazado de lneas. Algoritmo DDA (Digital Diferential Analizer), Algoritmo de Bresenham.

    Algoritmo de Bresenham para trazado de circunferencias, Algoritmo del punto medio para trazado de circunferencias

    Algoritmo del punto medio para generacin de elipses Polilneas Curvas Splines cbicas naturales, Splines de Hermite,

    Curvas de Bezier. Estructura de un Programa OpenGL Despliege de lineas, tringulos, cuadrados,

    circunferencias, etc mediante OpenGL

  • Primitivas de GraficacinTrazado de lneas

    Algoritmo DDA (Digital Diferential Analizer)

  • Primitivas de GraficacinTrazado de lneas

    Algoritmo de Bresenham

    Con el signo de d1-d2 podemos decidir cual pixelEst mas cerca de la lnea ideal

  • Primitivas de GraficacinTrazado de lneas

    Algoritmo de Bresenham

    Problema: Requiere modificarse para evitar aritmtica de flotantes

  • Primitivas de GraficacinTrazado de lneas

    Algoritmo de Bresenham

    Esta versin usa solo aritmtica entera

  • Primitivas de GraficacinTrazado de circunferenciasAlgoritmo de Bresenham

    La idea bsica es usar solo el signo del error en que se incurre para decidir cual pixel encender

    y=r;d= -r; pixel(0,r); for(x=1;x=0) {

    y--; d -= 2y;

    } pixel(x,y);

    }

  • Primitivas de GraficacinTrazado de circunferenciasAlgoritmo del punto medio

  • Primitivas de GraficacinAlgoritmo del punto medio para trazado de elipses

    -Usamos la ecuacin de la elipse paradecidir si el punto medio est dentro o fuera de la elipse

    -Como no tenemos simetra a nivel octante, tenemos que generar todo un cuadrante

  • Primitivas de GraficacinPolilneas

    Abierta

    Autointersectada

    Cerrada

  • Primitivas de GraficacinSplines

    De interpolacin De aproximacin

  • Primitivas de GraficacinSplines

    (a) Continuidad de orden cero. (b) de primer orden c) de segundo orden

  • Primitivas de GraficacinCurvas Splines cbicas naturales

    Cada segmento se representa por un polinomio de tercer grado (cbico)

    Por cada polinomio cbico hay 4 incgnitas

    Hay que resolver un sistema de 4n ecuaciones con 4n incgnitas

    Si un punto de control se modifica hay que volver a solucionar el sistema de ecuaciones

    En estas splines no hay control local

    Tienen continuidad de segundo orden

  • Primitivas de GraficacinSplines de Hermite

    Tienen continuidad de primer orden

    Permiten control local

    Restricciones

    Por cada segmento hay que resolver un sistema de 4x4

  • Primitivas de GraficacinSplines de Hermite

    Como la matriz de coeficientes no cambiaen realidad solo se requiere de una simple multiplicacinmatricial por cada segmento

  • Primitivas de GraficacinSplines de Hermite

    Reagrupando:

    Funciones de ponderacin

  • Primitivas de GraficacinSplines cardinales

    Problema: las Splines de Hermite requieren que el usuario especifique la pendienteEn cada punto de control

    Solucin: Estimar las pendientes usando las formulas

    Donde t es el parmetro de tensin t>0

    t

  • Primitivas de GraficacinCurvas de Bezier

    Pierre Bzier trabajaba para la Renault diseando carroceras

    Donde:

  • Primitivas de GraficacinCurvas de Bzier

    Por ejemplo, para n=4 (nmero de puntos de control)

  • Primitivas de GraficacinEstructura de un programa en OpenGL

  • Primitivas de GraficacinDespliegue de lneas, tringulos y cuadrados en

    OpenGL

    Despliega dos lneas

    Despliega polilnea

  • Primitivas de GraficacinDespliegue de lneas, tringulos y cuadrados en

    OpenGL

    Despliega polilnea cerrada

    Despliega dos tringulos

  • Primitivas de GraficacinDespliegue de lneas, tringulos y cuadrados en

    OpenGL

    Despliega polgono

  • Algoritmos de relleno de reas

    Relleno mediante ordenamiento de aristas

    Relleno mediante complementacin

    Relleno mediante complementacin usando una cerca

    Algoritmo simple de siembra de semilla

    Siembra de semilla por lnea de rastreo

    Funciones de OpenGL para manejo del color de las figuras y del fondo

  • Algoritmos de relleno de reasRelleno mediante ordenamiento de aristas

    -Procesar por cada lnea de rastreo -ordenar aristas respecto a y y luego respecto a x-Rellenar de la primera arista a la segunda, luego de la tercera a la cuarta, etc

  • Algoritmos de relleno de reasRelleno mediante ordenamiento de aristas

    Mantener la lista de aristas ordenada en lugar de ordenarla al final

  • Algoritmos de relleno de reasRelleno mediante ordenamiento de aristas

    Eliminar duplicados correspondientes a los vrtices que no sonMximos ni mnimos (Ej vrtice 4 y 12)

  • Algoritmos de relleno de reasRelleno mediante complementacin

    En este ejemplo se procesaron las aristas en el sig. orden: d,b,e,c,aCualquier orden funcionaNo se procesan las aristas horizontales

  • Algoritmos de relleno de reasRelleno mediante complementacin

    Modificacin usando una cerca

    En este ejemplo se procesaron las aristas en el sig. orden: d,b,e,c,aCualquier orden funcionaNo se procesan las aristas horizontales

  • Algoritmos de relleno de reasAlgoritmo simple de siembra de semilla

    Conectividad 4

    Conectividad 8

  • Algoritmos de relleno de reasAlgoritmo simple de siembra de semilla

    Semilla inicial

    Se detiene porque se asumi conectividad 4

  • Algoritmos de relleno de reasAlgoritmo simple de siembra de semilla

  • Algoritmos de relleno de reasAlgoritmo de siembra de semilla por lnea de rastreo

  • Algoritmos de relleno de reaFunciones de OpenGL para manejo del color de las

    figuras y del fondo

    void glColor3f( GLfoat red, GLfoat green, GLfoat blue)

    Una vez ejecutada esta instruccin las figuras que se dibujen tendrn este color

    void glColor4f( GLfoat red, GLfoat green, GLfoat blue, GLfoat alpha)

    Igual que la anterior pero tiene un parametro de transparencia

    void glClearColor3f( GLfoat red, GLfoat green, GLfoatblue)

    Para especificar el color del fondo

  • Algoritmos de recorte

    Cdigos de regin para determinar la visibilidad de lneas

    Algoritmo de recorte explcito en 2D

    Algoritmo de Sutherland-Cohen

    Algoritmo de la subdivisin del punto medio

    Algoritmo de Cyrus-Beck para recorte de regiones convexas

  • El concepto de recorte

    Antes del recorteDespus del recorte

  • Algoritmos de recorteCdigos de Regin para

    determinar la visibilidad de lneas

    0110

    1010

    0101

    1001

    Bit 0 IzquierdaBit 1 DerechaBit 2 ArribaBit 3 Abajo

  • Algoritmos de recorteCdigos de Regin para

    determinar la visibilidad de lneas

  • Algoritmos de recorteAlgoritmo de recorte explcito en 2D

    Deduciendo la ec de larecta que va de(x1,y2) a (x2,y2)

  • Algoritmos de recorteAlgoritmo de recorte explcito en 2D

    De manera Similar

  • Algoritmos de recorteAlgoritmo de recorte explcito en 2D

    La interseccin con el extremo superior ocurre en:

  • Algoritmos de recorteAlgoritmo de recorte explcito en 2D.

    Ejemplo

    Recorte la lnea que va de(-3/2,1/6) a (1/2,3/2)

  • Algoritmos de recorteAlgoritmo de recorte explcito en 2D. Ejemplo

  • Algoritmos de recorteAlgoritmo de recorte explcito en 2D. Ejemplo

  • Algoritmos de recorteAlgoritmo de Sutherland-Cohen

  • Algoritmos de recorteAlgoritmo de la subdivisin del punto medio

    Ideal para implementar en hardware

  • Algoritmos de recorteAlgoritmo de Cyrus-Beck para recorte de

    regiones convexas

    El Algoritmo de Cyrus-Beck hace uso del hecho de que un punto a est dentrode un rea de recorte convexa respecto a cierta rea que define un borde si se cumple la desigualdad:

    donde n es un vector normal a la lnea que define el borde y b es cualquierpunto en ese borde

    El Algoritmo de Cyrus-Beck hace uso de la ecuacin paramtrica de unalnea recta que va de P1 a P2

  • Algoritmos de recorteAlgoritmo de Cyrus-Beck para recorte de

    regiones convexas

    podemos obtener el valor de t para el cual la lnea coincide con la fronteradel rea de recorte despejndolo de:

    Donde f es cualquir punto de esa frontera

  • Algoritmos de recorteAlgoritmo de Cyrus-Beck para recorte de

    regiones convexas. Ejemplo

    Recortar la lnea que va de (-1,1) a (3,3)

  • Algoritmos de recorteAlgoritmo de Cyrus-Beck para recorte de

    regiones convexas. Ejemplo

    La directrz es:

    Para la arista V5V6 la normal es:

  • Algoritmos de recorteAlgoritmo de Cyrus-Beck para recorte de

    regiones convexas. Ejemplo

  • Algoritmos de recorteAlgoritmo de Cyrus-Beck para recorte de regiones

    convexas. Ejemplo

    Para terminar el ejemplo solo resta decir que la lnea recortada comienzaen t = 1=4 y termina en t = 5=6, lo cual corresponde a una nueva lnea queva de (0,3/2) a (7/3,8/3)

    Repitiendo para el Resto de las aristasCompletamos la tabla

  • Pipeline de visualizacin bidimensional

    Coordenadas locales

    Coordenadas mundiales

    Puerto de visin

    Funciones OpenGL para visualizacin 2D

  • Pipeline de visualizacin bidimensionalCoordenadas locales

    Tambin se llaman coordenadas de modelado

    Una figura se define en coordenadas relativas a un punto de la misma figura, por ejemplo el centro de la misma

    Por ejemplo los vrtices de un rectngulo pudieran establecerse relativos a la esquina inferior e izquierda del mismo

  • Pipeline de visualizacin bidimensionalCoordenadas mundiales

    Todas las figuras que forman un dibujo deben transformarse a un nico sistema de coordenadas.

  • Pipeline de visualizacin bidimensionalpuerto de visin

    La parte de una grfica que se desea desplegar se denomina ventana

    La ventana se especifica en coordenadas mundiales El puerto de visin especifica donde se desplegar el contenido de

    la ventana El puerto de visin se especifica en coordenadas de dispositivo

  • Pipeline de visualizacin bidimensionalpuerto de visin

    Manteniendo fijo el tamao de la ventana y aumentando el tamao del puerto de visin se obtiene un efecto de zoom in (acercamiento)

    Manteniendo fijo el puerto de visin y cambiando la ventana de posicin se obtiene un efecto de paneo de diferentes partes de una grfica

    Se requiere una transformacin de ventana a puerto de visin

  • Pipeline de visualizacin bidimensional

  • Pipeline de visualizacin bidimensionalFunciones OpenGL de visualizacin bidimensional

    Para especificar la ubicacin y tamao del puerto de visin en OpenGL usamos la funcin

    glViewport(int x, int y, int ancho, int alto)

    La funcin gluOrtho2D sirve para poder especificar directamente en coordenadas mundiales al dibujar, por ejemplo:

    gluOrtho2D(0.0,450.0,0.0,375.0)

    Nos permite especificar vrtices (x,y) tales que

    x est en el rango [0,450] y y en [0,375]

  • Transformaciones geomtricas

    Transformaciones afines Transformaciones geomtricas bidimensionales bsicas:

    Traslacin, escalamiento, rotacin Coordenadas homogneas Transformaciones compuestas: Escalamiento respecto a un

    punto fijo; Rotacin respecto a un punto arbitrario Reflexiones Transformaciones geomtricas en 3D simples: Escalamiento,

    traslacin, rotacin respecto a los ejes X, Y y Z Rotacin respecto a un eje arbitrario por: (a) Composicin de

    matrices, (b) Cjto de vectores ortogonales, (c) cuaternios Transformaciones geomtricas con OpenGL Manejo de Pilas de matrices con OpenGL

  • Transformaciones geomtricasTransformaciones afines

    Una transformacin afn es aquella que puede expresarse de la siguiente manera:

    xyxx tPbPaQ ..

    yyxy tPdPcQ ..

    y

    x

    y

    x

    y

    x

    t

    t

    P

    P

    dc

    ba

    Q

    Q

    O bien:

  • Transformaciones geomtricasTransformaciones afines

    Las transformaciones afines son lineales si se aplica la transformacin a todos los puntos

    que forman una lnea se obtiene otra lnea que tambin se puede obtener aplicando la transformacin solo a los extremos de la lnea y se generan los puntos intermedios mediante algn algoritmo de trazado de lneas como el de Bresenham

    si se transforma un punto que est a la mitad de la lnea, este punto de ubicarla justamente a la mitad de la lnea transformada

  • Transformaciones geomtricasTransformaciones afines

    Ejemplos de transformaciones afines:

    Traslacin

    Escalamiento

    Rotacin

    Reflexin

    Cizallamiento

  • Transformaciones geomtricastransformaciones geomtricas bidimensionales bsicas

    Traslacin

    Trasladamos un punto (x,y) mediante:

  • Transformaciones geomtricastransformaciones geomtricas bidimensionales bsicas

    Traslacin

    Toda transformacin geomtrica tiene dos interpretaciones:

    x

    y

    (2,3)v

    x

    y

    (1,2)

    u

    v

    u

    u=x-1

    v=y-1

    x=u+1

    y=v+1

    x

    y

    (2,3)

    (1,2)

    x

    y

    x=x-1

    y=y-1

    x=x+1

    y=y+1

    Pasar de un sistema de Coordenadas a otro

    Modificar la forma o posicin de objetosen un sistema decoordenadas

  • Transformaciones geomtricastransformaciones geomtricas bidimensionales bsicas

    Traslacin

  • Transformaciones geomtricastransformaciones geomtricas bidimensionales bsicas

    Traslacin

    El escalamiento simple tiene implcita una traslacin. En el ejemplo se us un factor de escalamiento de 2 tanto en x como en y

  • Transformaciones geomtricastransformaciones geomtricas bidimensionales bsicas

    Rotacin

    Obtenemos:

    De la figura:

    Finalmente!

  • Transformaciones geomtricastransformaciones geomtricas bidimensionales bsicas

    Rotacin

    Se puede expresar matricialmente como:

    La rotacin tambin implica una traslacin

  • Transformaciones geomtricasCoordenadas homogneas

    Las coordenadas (x,y) tiene un nmero infinito de maneras de representarse en coordenadas homogneas (xh,yh,h)

    La forma estndar h=1, es decir (x,y,1) Ventajas:1. Todas las transformaciones se pueden hacer

    como productos matriciales, incluso la traslacin2. Facilita la composicin de transformaciones.

    Muchas transformaciones sucesivas se convierten en una sola (gran ahorro!)

  • Transformaciones geomtricasCoordenadas homogneas

    Todas las transformaciones como productos matriciales:

  • Transformaciones geomtricasTransformaciones compuestas

    Escalamiento respecto a un punto fijo

    Traslacin de manera que el punto fijo coincida con el origen

    Escalamiento simple

    Traslacin de manera que el punto fijo regrese a su posicin

  • Transformaciones geomtricasTransformaciones compuestas

    Escalamiento respecto a un punto fijo

    Ahora se aprecia la ventaja de trabajar en coordenadas homogneas

  • Transformaciones geomtricasTransformaciones compuestas

    Rotacin respecto a un punto arbitrario

    Trasladar de manera que el punto de rotacin coincida con el origen

    Rotar y luego Trasladar de manera que el punto de rotacin regrese a su posicin original

  • Transformaciones geomtricasTransformaciones compuestas

    Rotacin respecto a un punto arbitrario

    De nuevo se aprecia la ventaja de trabajar en coordenadas homogneas

  • Transformaciones geomtricasReflexiones

    Reflexin respecto al eje x Reflexin respecto al eje y

  • Transformaciones geomtricasReflexiones

    Reflexin respecto al origenReflexin respecto a la recta x=y

  • Transformaciones geomtricas Transformaciones geomtricas en 3D simples

    Escalamiento

  • Transformaciones geomtricas Transformaciones geomtricas en 3D simples

    Traslacin

  • Transformaciones geomtricas en 3D simplesRotacin alrededor del eje X, Y o Z

    Rotacin alrededor del eje X

    Rotacin alrededor del eje Y

    Rotacin alrededor del eje Z

  • Transformaciones geomtricas en 3D simplesEjemplos

    1000

    0100

    0010

    0001

    1000

    05.100

    005.10

    0005.1

    1000

    05.100

    00866.05.0

    005.0866.0

    1000

    0100

    0010

    0002

    1000

    0100

    500010

    500001

    1000

    0100

    3.600866.05.0

    7.43005.0866.0

  • Transformaciones geomtricasRotacin respecto a un eje arbitrario

    Si el eje es paralelo a unoDe los ejes del sistema deCoordenadas:1) Trasladar de manera queUn punto que pasa por elEje de rotacin coincidaCon el origen2) Rotar alrededor del eje3) Traslacin inversa respectoAl paso 1

  • Rotacin respecto a un eje arbitrarioDeterminacin de la matriz de transformacin

    por composicin de matrices

  • Rotacin respecto a un eje arbitrarioDeterminacin de la matriz de transformacin por

    composicin de matrices

  • Rotacin respecto a un eje arbitrarioDeterminacin de la matriz de transformacin por

    composicin de matrices

  • Rotacin respecto a un eje arbitrarioDeterminacin de la matriz de transformacin por

    composicin de matrices

  • Rotacin respecto a un eje arbitrarioDeterminacin de la matriz de transformacin por

    composicin de matrices

    Adems:

    Para rotar un punto p alrededor de un eje arbitrario usamos:

  • Rotacin alrededor de un eje arbitrariobsqueda de un conjunto de vectores

    ortogonales

    u es el vector alrededor del cual se desea rotar

  • Rotacin alrededor de un eje arbitrariousando cuaterniones

    Un cuaternio es un nmero con una parte real y tres partes imaginarias

    Se cumple que

    Adems

  • Rotacin alrededor de un eje arbitrariousando cuaterniones

    Un cuaternio es tambin un par formado por un escalar y un vector de 3 componentes

    El producto se calcula como:

  • Rotacin alrededor de un eje arbitrariousando cuaterniones

    Para rotar un punto p alrededor de un vector u un cierto ngulo tetaRealizamos el producto de cuaternios:

    Como q es un cuaternio unitario se cumple que su inverso multiplicativo es:

  • Transformaciones geomtricas con OpenGL

    Para traslacin usamos glTranslatef(tx,ty,tz) Para el escalamientoglScalef(Sx,Sy,Sz) Para la rotacinglRotatef(teta,x,y,z)donde teta es el ngulo en grados que deseamos rotar

    alrededor de un vector especificado por x,y y z, por ejemplo para rotar 30 grados alrededor del eje y usariamos:

    glRotatef(30,0,1,0)

  • Transformaciones geomtricas Manejo de Pilas de Matrices con OpenGL

    La funcin glPushMatrix() realiza una copia de la matriz superiory la pone encima de la pila, de tal forma que las dos matrices superioresson iguales.glPopMatrix() desecha la matriz que est en el tope de la pila.

  • Visualizacin 3D

    Proyeccin en paralelo

    Proyeccin en perspectiva

    Pipeline de visualizacin tridimensional

    Volumen de visin

    Funciones de visualizacin 3D en OpenGL

  • Visualizacin 3Dproyeccin en paralelo

    En z=0:

  • Visualizacin 3Dproyeccin en paralelo

    En forma matricial, en coordenadas homogneas

  • Visualizacin 3Dproyeccin en perspectiva

    (xc,yc,yc)

    En z=0:

  • Visualizacin 3Dproyeccin en perspectiva

  • Visualizacin 3DPipeline de visualizacin tridimensional

  • Pipeline de visualizacin 3DCoordenadas locales

    Tambin se llaman coordenadas de modelado

    Un objeto se define en coordenadas relativas a un punto del mismo objeto, por ejemplo el centro del objeto

    Ej podemos definir un cubo como

    x

    z

    y

    (-0.5,0.5,-0.5)

    (-0.5,-0.5,-0.5)

    (0.5,-0.5,0.5) (-0.5,-0.5,0.5)

    (0.5,-0.5,-0.5)

    (0.5,0.5,-0.5)

    (-0.5,0.5,0.5) (0.5,0.5,0.5)

  • Pipeline de visualizacin 3DCoordenadas mundiales

    Al definir una escena, transformamos las coordenadas de todos los objetos que la componen a un referente nico, porejemplo una de las esquinas de la habitacin.

  • Visualizacin 3DVolumen de visin

  • Visualizacin 3DVolumen de visin

  • Visualizacin 3DFunciones de visualizacin 3D en OpenGL

    Para definir el volumen de visin usamos:

    glFrustum(left, right, bottom, top, near, far) Si el volumen de visin es simtrico podemos usar:

    gluPerspective(fovy, aspect, near, far) donde fovy es el ngulo del campo de visin en el plano yz el

    cual debe estar en el rango de 0 a 180 grados, aspect es la relacin ancho/alto del frustum, se recomienda hacer que coincida con la relacin ancho/alto de la ventana de despliegue, near y far deben ser valores positivos, por ejemplo:

    JGlu.gluPerspective(60.0, 1.0, 1.0, 20.0);

  • Supresin de lneas y superficies ocultas

    Supresin de segmentos de lnea ocultos

    Algoritmo del horizonte flotante

    Determinacin de la ecuacin de un plano

    Determinacin del vector Normal a un plano

    Deteccin de caras posteriores. Algoritmo de Roberts

    Algoritmo del Buffer Z o buffer de profundidad

    Algoritmo del buffer A para superficies transparentes

    Algoritmo del buffer Z por lnea de rastreo

    Mtodo de proyeccin de rayos

    Mtodo del rbol BSP

    Funciones OpenGL para suprimir superficies ocultas

  • Supresin de lneas y superficies ocultas

    Al suprimir las lneas ocultas se elimina la ambigedad

  • Supresin de lneas y superficies ocultasSupresin de segmentos de lnea ocultos

    Algoritmo del horizonte flotante

    22 )()(

    )exp()4/7cos()2/3(cos)5/1(

    zxa

    aazsenxy

  • Supresin de lneas y superficies ocultasSupresin de segmentos de lnea ocultos

    Algoritmo del horizonte flotante

    Si para cada valor dado de x, el valor y de la curva en el plano actual es mayor que el valor y para todas las curvas anteriores, entonces la curva es visible para ese valor especfico de x, en caso contrario ser invisible.

  • Supresin de lneas y superficies ocultasSupresin de segmentos de lnea ocultos

    Algoritmo del horizonte flotante

    Para implementar este algoritmo simplemente hay que mantener un arreglo del mismo tamao que la resolucin de la imagen en el eje x. Los valores de este arreglo representan el horizonte y este horizonte flota" a medida que cada curva esdibujada.

  • Supresin de lneas y superficies ocultasSupresin de segmentos de lnea ocultos

    Algoritmo del horizonte flotante

    Si para algn valor dado de x, el valor y correspondiente de la curvaen el plano actual es superior al mximo valor o inferior al mnimo valorentre todas las curvas anteriores, entonces la curva actual en dicho valor x es visible, si no se cumple ninguna de las dos cosas, entonces es invisible.

  • Supresin de lneas y superficies ocultasSupresin de segmentos de lnea ocultos

    Algoritmo del horizonte flotante

    Para implementar el algoritmo del horizonte flotante se requieren entonces dos arreglos uno para almacenar los valores mximos y el otro para almacenar los mnimos, a estos arreglos se les denominan horizontes flotantes superior e inferior respectvamente.

  • Supresin de lneas y superficies ocultasSupresin de segmentos de lnea ocultos

    Algoritmo del horizonte flotante

  • Supresin de lneas y superficies ocultasSupresin de segmentos de lnea ocultos

    Algoritmo del horizonte flotante

  • Supresin de lneas y superficies ocultasSupresin de segmentos de lnea ocultos

    Algoritmo del horizonte flotante

  • Supresin de lneas y superficies ocultasDeterminacin de la ecuacin de un plano

    La ecuacin de un plano es:

    O en su forma normalizada (d=1)

  • Supresin de lneas y superficies ocultasDeterminacin del vector normal a un plano

    Si tenemos la ecuacin del plano:

  • Supresin de lneas y superficies ocultasDeteccin de caras posteriores

    Algoritmo de Roberts

    La cara es posterior si no se cumple:

    Las lneas compartidas entre dos caras que son posteriores deben suprimirse

  • Supresin de Lneas y superficies ocultasAlgoritmo del buffer Z o buffer de profundidad

    Eliminacin de caras posteriores

    Eliminacin de superficies ocultas

  • Supresin de Lneas y superficies ocultasAlgoritmo del buffer Z o buffer de profundidad

    Las partes visibles de una escena se pueden descubrir haciendo algo similar al algoritmo del horizonte flotante, es decir, podemos mantener un arreglo con las distancias desde el observador hasta la superficie mas cercana por cada pixel del plano de visin

    A diferencia del algoritmo del horizonte flotante, el arreglo que necesitamos es un arreglo bidimensional del tamao de la resolucin de la imagen deseada. La profundidad se mide la coordenada z, por esta razn, a este arreglo le llamamos buffer de profundidad o buffer Z.

  • Supresin de Lneas y superficies ocultasAlgoritmo del buffer Z o buffer de profundidad

    Los valores de profundidad de una cara se pueden obtener a partir de la ecuacin del plano correspondiente a esa cara mediante

    Por cada objeto que forma parte de una escena, por cada cara que forma parte del objeto y por cada punto (x,y,z) de la cara , calcular su profundidad z y compararla con la almacenada en el buffer Z para el correspondiente (x,y), si la profundidad del punto es menor, reemplaza a la del buffer Z.

  • Supresin de Lneas y superficies ocultasAlgoritmo del buffer Z o buffer de profundidad

    La principal ventaja de este mtodo es su simplicidad, las desventajas son:

    Demasiados clculos innecesarios puesto que en demasiadas ocasiones los pixelssobreescriben pixels anteriores

    Posibles errores de cuantizacin

    No soporta objetos transparentes

  • Supresin de Lneas y superficies ocultas Algoritmo del buffer A para superficies transparentes

    El algoritmo del buffer A es una modificacin del algoritmo del buffer Z para soportar objetos translcidos, la nica razn por la que recibe ese nombre es por que la A est en el extremo opuesto a la Z

    En el buffer A, en lugar de almacenar simplemente un valor de profundidad se almacena un apuntador a una lista ligada. Si el primer elemento de la lista es un objeto opaco, entonces la lista termina ah

    si se trata de un objeto translcido, entonces la lista contina con el siguiente objeto mas cercano en la misma direccin, el cual tambin pudiera ser otro objeto translcido, la lista contina de manera que el ltimo objeto es opaco

    Para saber el color de un pixel se debe recorrer la lista asociada a ese pixel

  • Supresin de Lneas y superficies ocultas Algoritmo del buffer Z por lnea de rastreo

    Para acelerar el mtodo del buffer Z, se puede proceder por lnea de rastreo, las posiciones horizontales adyacentes a lo largo de la lneadifferen tan solo una unidad, si se ha determinado que la profundidad en la posicin (x,y) es z, entonces la profundidad de la siguiente posicin (x+1,y) en la misma lnea de rastreo ser:

    El valor a/c permanece constante mientras no noscambiemos de polgono

  • Supresin de Lneas y superficies ocultas Mtodo de proyeccin de rayos

    Consiste en trazar una lnea perpendicular al plano de visin, determinar a cuales polgonos intersecta esta lnea y elegir la interseccin mas cercana al plano de visin, esto se hace por cada pixel del plano de visin.

    En el mtodo del buffer de profundidad se sigue el rden de los polgonos de la escena para determinar el mas cercano para cada pixel

    En este mtodo se sigue el orden de los pixels y se sigue un rayo por cada pixel, este mtodo ahorra clculos.

  • Supresin de Lneas y superficies ocultas Mtodo del rbol BSP

    El algoritmo del pintor es probablemente la mas simple de las tcnicas para resolver el problema de HSR, se trata de ordenar los polgonos en orden ascendente de profundidad y desplegarloscompletos comenzando por los de mayor profundidad, los de menor profundidad cubrirn a los de mayor profundidad de la misma manera que en un lienzo al pintar un rbol, este cubre la parte del paisaje que queda detrs de el.

    Ejemplo en el que el Algoritmo del pintor falla

  • Supresin de Lneas y superficies ocultas Mtodo del rbol BSP

    Para solucionar el problema de los polgonos traslapados, se puede dividir el espacio sucesivamente hasta que las diferentes regiones en las que el espacio se haya dividido sean lo suficientemente pequeas para que en su interior ningn polgono se traslape en profundidad con ningn otro polgono.

    Un rbol BSP (por Binary Space Partitioning) sirve para representar la manera en que el espacio ha sido dividido.

  • Supresin de Lneas y superficies ocultas Mtodo del rbol BSP

    El espacio es particionado estableciendo planos que dividen a los polgonos en aquellos que quedan de un lado y aquellos que quedan del otro lado

    Un rbol BSP tiene tantos niveles como planos divisorios, cada plano divisoriodivide el espacio en dos (de ah lo de binario).

  • Supresin de Lneas y superficies ocultas Funciones OpenGL para suprimir superficies ocultas

    La eliminacin de caras posteriores se lleva a efecto usando:

    glEnable(GL_CULL_FACE);glCullFace(modo);donde modo puede tomar el valor de GL_FRONT, GL_BACK o

    GL_FRONT_AND_BACK. Utilizamos GL_BACK para eliminar caras posteriores, si

    usamos GL_FRONT se eliminan las caras frontales. Si utilizamos GL_FRONT_AND_BACK se eliminan tanto las

    caras frontales como las posteriores, quedando solamente los puntos y lneas que no forman polgonos.

    La eliminacin de caras se desactiva mediante:glDisable(GL_CULL_FACE);

  • Supresin de Lneas y superficies ocultas Funciones OpenGL para suprimir superficies ocultas

    Para usar las rutinas de deteccin de visibilidad mediante buffer de profundidad debemos solicitar que configure un buffer de profundidad y un buffer de refresco (el buffer del color), esto lo hacemos de la siguiente manera:

    glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DEPTH);

    Para inicializar el buffer de profundidad y el buffer del color hacemos:

    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

    Como los valores de profundidad en el sistema de coordenadas de pantalla 3D estn normalizados y quedan en el rango de cero a uno, esta instruccin asigna puros valores de 1.0 al buffer de profundidad.

    La deteccin de la visibilidad se activa mediante:

    glEnable(GL_DEPTH_TEST);

    Y se desactiva mediante:

    glDisable(GL_DEPTH_TEST);

  • Iluminacin

    Reflexin difusa Ecuacin de Lambert Reflexin especular Modelado de la iluminacin Determinacin del vector Normal a un vrtice Sombreado de Gourad Sombreado de Phong Funciones de OpenGL para manejo de

    Iluminacin Radiosidad Funciones OpenGL para Iluminacin

  • Reflexin difusa

    (a)Reflexin especular perfecta

    (b)Reflexin especular imperfecta

    (c)Reflexin difusa

  • Reflexin difusa

    Cuando la luz incide en un objeto opaco, la luz reflejada en su superficie lo har en todas direcciones de manera uniforme

    L es el vector que indica la direccin de la fuente de luzN es el vector Normal (perpendicular) a la superficieV es el vector que indica la posicin del observador

  • Reflexin difusa

    La brillantez de una superficie donde la luz es reflejada de forma difusa no depende de la posicin del observador sino de la inclinacin de dicha superficie respecto a la fuente de luz

    A la reflexin difusa tambin se le conoce como reflexin Lambertiana

  • Ecuacin de Lambert

    Para mltiples fuentes de luz se convierte en:

    n

    nni,d.NLII

    N

  • Reflexin especular

    Is= I

    icosn = I

    i(R.V)n

    donde Ii

    es la intensidad de luz incidente

    es el ngulo entre la direccin del

    observador V y la direccin espejo R.

    n es un ndice que indica el grado de

    perfeccin de la superficie

  • Modelado de la iluminacin

    Modelo local. Es aquel que solo toma en cuenta la luz que llega

    directamente de la fuente de luzEj Modelo de Iluminacin de Phong Modelo Global.Es el que considera no solo la luz que llega de

    manera directa sino aquella que llega de manera indirecta (reflejada de otros objetos)

    Ej Iluminacin por proyeccin de rayosEj Radiosidad

  • Modelado de la iluminacin

    Iluminacin directa solamente(Modelo de iluminacin local

    Iluminacin directa e indirecta(Modelo de iluminacin global)

  • Modelado de la iluminacin

    I = kaIa+ I

    i(k

    d(L.N) + k

    s(R.V)n)

    El modelo de iluminacin de Phong (1975) toma en cuenta que en una superficie ocurre en cierto grado la reflexin difusa, en cierto grado la reflexin especular y un trmino denominado luz ambiental donde se trivializa la iluminacin indirecta

  • Modelado de la iluminacin

    I = kaIa+ I

    i(k

    d(L.N) + k

    s(R.V)n)

    El modelo de iluminacin de Phong (1975) toma en cuenta que en una superficie ocurre en cierto grado la reflexin difusa, en cierto grado la reflexin especular y un trmino denominado luz ambiental donde se trivializa la iluminacin indirecta

  • Modelado de la iluminacin

    Ka es el coeficiente de reflexin de la

    superficie para la luz ambiental; kd es el

    coeficiente de reflexin difusa y ks es el

    coeficiente de reflexin especular

    Un coeficiente de reflexin es la proporcin de luz incidente que es reflejada por una superficie.

    I = kaIa+ f

    attIi(k

    d(L.N) + k

    s(R.V)n) donde f

    att=1/(d2)

    I = kaIa+ I

    i(k

    d(L.N) + k

    s(R.V)n)

    Al modelo de iluminacin de Phong se le puede incluir un factor de atenuacin de la luz que dependa de la distancia a la fuente de luz d

  • Modelado de la iluminacin

    1.El costo de la iluminacin de Phong se puede reducir si se hacen las sig.

    consideraciones:

    o La fuente de luz est muy lejos (en infinito), entonces L es constante

    o El observador est muy lejos, entonces V es constante

    Para transformaciones geomtricas

    consideramos un observador muy lejano y para

    clculo de iluminacin consideramos una fuente de

    luz muy lejana.

    El vector H

    El vector R es muy costoso de detrerminar, entonces definimos el vector H:

    H = (L+V)/2

    Ahora,I = k

    aIa+ I

    i(k

    d(L.N) + k

    s(N.H)n)

    El trmino (N.H) vara de la misma forma que (R.V)Estas simplificaciones implcan que I = f(N)

  • Modelado de la iluminacin

    Iluminacin de Phong para diferentes valores de Ks y Kd variando desde 0.0 a 1.0 con incrementos de 0.2 (Ka=0.7 y n=10.0 en todas las imgenes)

  • Modelado de la iluminacin

    Iluminacin para diferentes valores de Ksy de n (Ka=0.7, Kd=1.0 para todas las imgenes)

  • Determinacin del vector Normal a un vrtice

    NA= (N

    1+ N

    2+ N

    3+ N

    4)/4

    La normal a un vrtice se define como el promedio de las normales a los polgonos de los que forma parte el vrtice en cuestin

    Ejemplo:

  • Determinacin del vector Normal a un vrtice

    Por supuesto, primero debemos determinar la normal en cada plano

    (x1,y1,z1)

    W

    V

    (x2,y2,z2)

    (x0,y0,z0)

    N V = (x1,y1,z1)(x0,y0,z0)

    W = (x2,y

    2,z

    2)(x

    0,y

    0,z

    0)

    N = V x W

    = (vx,v

    y,v

    z)x(w

    x,w

    y,w

    z)

    = ((vywz- v

    zwy),

    (vzwx- v

    xwz),

    (vxwy- v

    ywx))

    Cada N debe ser normalizada:N = (N

    x/|N|, N

    y/|N|, N

    z/|N|)

    donde

    |N| = sqrt(Nx2 + N

    y2 + N

    z2)

  • Sombreado de Gourad

    El proceso de sombreado de Gourad de cada polgono de que est hecho el objeto consiste en:

    1. Determinar el vector normal en cada uno de los vrtices del polgono

    2. Aplicar el modelo de iluminacin de Phong o alguna variante para determinar la intensidad en cada vrtice

    3. Interpolar linealmente las intensidades de los vrtices para determinar

  • Sombreado de Gourad

  • Sombreado de Gourad

    El sombreado de Gourad evita que se vean las divisiones entre los polgonos que forman un objeto

    Como la reflexin especular solo es calculada en los vrtices, la interpolacin de Gourad no maneja de manera adecuada la reflexin especular

  • Sombreado de Phong

    Las normales a los vrtices se interpolan a travs de los polgonos

    La intensidad de luz se calcula en cada pixel usando la normal interpolada

    La luz especular en cada pixel se determina de manera adecuada

    El costo de la interpolacin de Phong es mucho mayor que el de Gourad porque en el de Gouradla intensidad de luz solo se calcula en los vrtices

  • Sombreado de Phong

  • Sombreado de Phong

  • Funciones de OpenGL para manejo de Iluminacin

    Para definir una fuente de luz, debemos establecer sus parmetros.

    La siguientes dos lneas establecen una fuente de luz en la posicin (-2,2,2), el cuarto elemento del arreglo light_pos indica si los tres elementos anteriores del arreglo se deben interpretar como una posicin (uno) o como una direccin (cero) lo cual implica que la luz se considera local o muy lejana respectivamente.

    GLFloat light_pos[]=(-2.0,2.0,2.0,1.0); glLightfv(GL_LIGHT0,GL_POSITION,light_pos);

  • Funciones de OpenGL para manejo de Iluminacin

    Las siguientes dos lneas sirven para especificar la luz ambiental como blanca (primeros tres valores del arreglo light_Ka)

    GLFloat light_Ka[]=(1.0,1.0,1.0,1.0); glLightfv(GL_LIGHT0,GL_AMBIENT,light_Ka); Las siguientes dos lneas sirven para especificar la

    luz difusa como blanca (primeros tres valores del arreglo light_Kd)

    GLFloat light_Kd[]=(1.0,1.0,1.0,1.0); glLightfv(GL_LIGHT0,GL_DIFFUSE,light_Kd);

  • Funciones de OpenGL para manejo de Iluminacin

    Las siguientes dos lneas sirven para especificar la luz especular como blanca (primeros tres valores del arreglo light_Ks)

    GLFloat light_Ks[]=(1.0,1.0,1.0,1.0);

    glLightfv(GL_LIGHT0,GL_SPECULAR,light_Ks);

  • Funciones de OpenGL para manejo de Iluminacin

    Los coeficientes de reflexin dependen del material del que estn hechos los objetos.

    Las siguientes dos lneas sirven para especificar una superficie que al incidir luz ambiental blanca la reflejar roja

    GLFloat material_Ka[]=(1.0,0.0,0.0,1.0); glMaterialfv(GL_FRONT,GL_AMBIENT,material_Ka); Las siguientes dos lneas sirven para especificar los

    coeficientes de reflexin difusa para cada uno de los tres colores bsicos.

    GLFloat material_Ka[]=(1.0,1.0,1.0,1.0); glMaterialfv(GL_FRONT,GL_DIFFUSE,material_Kd);

  • Funciones de OpenGL para manejo de Iluminacin

    Las siguientes dos lneas sirven para especificar los coecientes de reflexin especular para cada uno de los tres colores bsicos.

    GLFloat material_Ka[]=(1.0,1.0,1.0,1.0);

    glMaterialfv(GL_FRONT,GL_SPECULAR,material_Kd);

    Las siguientes dos lneas sirven para especificar que un objeto tiene luz propia y el color de esta.

    GLFloat material_Ke[]=(1.0,1.0,1.0,1.0);

    glMaterialfv(GL_FRONT,GL_EMISSION,material_Ke);

  • Funciones de OpenGL para manejo de Iluminacin

    La siguiente lnea sirve para especificar que tan perfecta es la reflexin especular, es decir, el exponente n del modelo de iluminacin de Phong

    Por ejemplo, para asignar el valor de 10.

    glMaterialfv(GL_FRONT,GL_SHININESS,10);

  • Iluminacin por proyeccin de rayos

    Es un mtodo de iluminacin global(toma en cuenta la iluminacin indirecta)

    Este mtodo modelala reflexin especularpero no la difusa

    El mtodo es dependiente de laposicin del observador

  • Iluminacin por proyeccin de rayos

    La proyeccin recursiva de rayos es un mtodo que resuelve simultneamente los siguientesproblemas:

    Deteccin de superficies visibles

    Sombreado por iluminacin directa

    Agregar efectos de reflexin especular global

    Determinacin de la geometra de las sombras

  • Iluminacin por proyeccin de rayos

    El primer trmino es la contribucin local proviene directamente de la fuente de luz y se calcula con el Modelo de iluminacin de Phong

    El segundo es la cantidad de luz reflejada que proviene de la direccin de reflexin de otro punto Pr (iluminacin indirecta)

    El tercero es la cantidad de luz reflejada que proviene del punto Pt en la direccin de refraccin (iluminacin indirecta)

    Este es un modelo recursivo pues I(Pr) e I(Pt) tambin se determinan usando la misma frmula

  • Iluminacin por proyeccin de rayos

    Para implementar este mtodo conviene construir un rbol donde se van guardando las diferentes contribuciones de luz

    Las hojas de este rbol son las primeras en tener completa su informacin

    La raz es la ltima en completarla, entonces se puede decir cual es la intensidad de luz que corresponde a un pixel.

    La altura del rbol es un parmetro que se interpreta como el nmero de intersecciones que se desea encontrar cuando se le da seguimiento al rayo,

    Un rbol de mayor altura corresponde con una mejor renderizacin pero evidentemente mas costosa

  • Iluminacin por proyeccin de rayos

  • Iluminacin por proyeccin de rayos

    Para encontrar la direccin de refraccin T usamos la ley de Snell

    NLT 12

    12

    2

    1 cos

    cos

  • Iluminacin por proyeccin de rayosEjemplo

  • Iluminacin por proyeccin de rayosEjemplo

    Profundidad cero Profundidad uno

  • Iluminacin por proyeccin de rayosEjemplo

  • Iluminacin por proyeccin de rayos

    El mtodo tambin es til para determinar la forma de las sombras

  • Radiosidad

    Modelo global (Luz directa a indirecta)

    Modela la interaccin de la reflexin difusa

    Mtodo independiente de la posicin del observador

    Cada superficie es dividida en parches

    Se basa en la ley de conservacin de la energa

    Se asume que todas las superficies son difusores perfectos

    Cada parche refleja luz recibida por cada uno de los dems parches

    Las fuentes de luz se modelan como parches que emiten luz propia

  • Radiosidad

    La interaccin entre parches depende su relacin geomtrica

    Complejidad O(n^2) por lo que se procura hacer parches grandes

    Las sombras se calculan correctamente Es un algoritmo que trabaja en el espacio de

    definicin de objetos ya que es independiente del observador

    Requiere de una etapa posterior de interpolacin similar a la de Gourad para que no se noten los parches

  • Radiosidad

    Aiij

    Aj 2

    ji

    i

    ijAiAj dAdAr

    coscos

    A

    1FF

    Una vez que la escena se ha dividido en parches, se calcula la relacin entre cada par de parches para calcular los Factores de forma

    Si r es razonablemente grande

    Ajj2

    ji

    dAiAjij dAr

    coscosFF

  • Radiosidad

    La analoga de Nusseltdice que podemos considerar la proyeccin del parche j sobre la superficie de una semi-esfera centrada en el rea elemental dAi como equivalente a considerar el parche mismo

  • Radiosidad

    Si usamos un semi-cubo es menos costoso calcular las proyecciones

  • RadiosidadEjemplo

  • RadiosidadEjemplo

  • Funciones OpenGL para Iluminacin

    La Librera grfica OpenGl no tiene implementada ninguna tcnica de modelado global de iluminacin

    Las funciones de iluminacin de OpenGL que presentamos anteriormente son una modificacin del modelo local de iluminacin de Phong

    Recordar que un modelo local no contempla la luz indirecta

    Sin embargo, podemos implementar las tcnicas de Radiosidad o de proyeccin de rayos y usar OpenGLpara desplegar los resultados