Está en la página 1de 181

UMSNH

Facultad de Ing. Elctrica


Carrera: Ingeniera en Computacin
Materia: 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 Building


http://www3.arct.cam.ac.uk/westC/cl/cl.html

Introduccin
Visualizacin de grficas 3D
Convective modelling
group, AOS, Univ
Illinois at UrbanaChampaign
http://redrock.ncsa.uiu
c.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/proj
ect_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 Graficacin
Trazado de lneas
Algoritmo DDA (Digital Diferential Analizer)

Primitivas de Graficacin
Trazado de lneas
Algoritmo de Bresenham

Con el signo de d1-d2 podemos decidir cual pixel


Est mas cerca de la lnea ideal

Primitivas de Graficacin
Trazado de lneas
Algoritmo de Bresenham

Problema: Requiere modificarse para evitar aritmtica de flotantes

Primitivas de Graficacin
Trazado de lneas
Algoritmo de Bresenham

Esta versin usa solo aritmtica entera

Primitivas de Graficacin
Trazado de circunferencias
Algoritmo 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<r/sqrt(2);x++) {
d+= 2x-1;
if (d>=0) {
y--;
d -= 2y;
}
pixel(x,y);
}

Primitivas de Graficacin
Trazado de circunferencias
Algoritmo del punto medio

Primitivas de Graficacin
Algoritmo del punto medio para trazado de elipses

-Usamos la ecuacin de la elipse para


decidir 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 Graficacin
Polilneas
Abierta

Autointersectada

Cerrada

Primitivas de Graficacin
Splines

De interpolacin

De aproximacin

Primitivas de Graficacin
Splines

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

Primitivas de Graficacin
Curvas 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 Graficacin
Splines de Hermite
Tienen continuidad de primer orden

Restricciones

Permiten control local

Por cada segmento hay que resolver un sistema de 4x4

Primitivas de Graficacin
Splines de Hermite
Como la matriz de
coeficientes no cambia
en realidad solo se requiere
de una simple multiplicacin
matricial por cada segmento

Primitivas de Graficacin
Splines
de
Hermite
Reagrupando:

Funciones de ponderacin

Primitivas de Graficacin
Splines cardinales
Problema: las Splines de Hermite requieren que el usuario especifique la pendiente
En cada punto de control

Solucin: Estimar las pendientes usando las formulas

t<0

Donde t es el parmetro de tensin

t>0

Primitivas de Graficacin
Curvas de Bezier
Pierre Bzier trabajaba para la Renault diseando carroceras

Donde:

Primitivas de Graficacin
Curvas de Bzier
Por ejemplo, para n=4 (nmero de puntos de control)

Primitivas de Graficacin
Estructura de un programa en OpenGL

Primitivas de Graficacin
Despliegue de lneas, tringulos y cuadrados en
OpenGL
Despliega dos lneas

Despliega polilnea

Primitivas de Graficacin
Despliegue de lneas, tringulos y cuadrados en
OpenGL
Despliega polilnea cerrada

Despliega dos tringulos

Primitivas de Graficacin
Despliegue 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 reas


Relleno 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 reas


Relleno mediante ordenamiento de aristas

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

Algoritmos de relleno de reas


Relleno mediante ordenamiento de aristas

Eliminar duplicados correspondientes a los vrtices que no son


Mximos ni mnimos (Ej vrtice 4 y 12)

Algoritmos de relleno de reas


Relleno mediante complementacin

En este ejemplo se procesaron las aristas en el sig. orden: d,b,e,c,a


Cualquier orden funciona
No se procesan las aristas horizontales

Algoritmos de relleno de reas


Relleno mediante complementacin
Modificacin usando una cerca

En este ejemplo se procesaron las aristas en el sig. orden: d,b,e,c,a


Cualquier orden funciona
No se procesan las aristas horizontales

Algoritmos de relleno de reas


Algoritmo simple de siembra de semilla

Conectividad 4

Conectividad 8

Algoritmos de relleno de reas


Algoritmo simple de siembra de semilla

Se detiene porque se a
sumi conectividad 4
Semilla inicial

Algoritmos de relleno de reas


Algoritmo simple de siembra de semilla

Algoritmos de relleno de reas


Algoritmo de siembra de semilla por lnea de rastreo

Algoritmos de relleno de rea


Funciones 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, GLfoat
blue)
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 recorte

Despus del recorte

Algoritmos de recorte
Cdigos de Regin para
determinar la visibilidad de lneas
0101

0110
Bit 0 Izquierda
Bit 1 Derecha
Bit 2 Arriba
Bit 3 Abajo

1001

1010

Algoritmos de recorte
Cdigos de Regin para
determinar la visibilidad de lneas

Algoritmos de recorte
Algoritmo de recorte explcito en 2D
Deduciendo la ec de la
recta que va de
(x1,y2) a (x2,y2)

Algoritmos de recorte
Algoritmo de recorte explcito en 2D
De manera Similar

Algoritmos de recorte
Algoritmo de recorte explcito en 2D
La interseccin con el extremo superior ocurre en:

Algoritmos de recorte
Algoritmo de recorte explcito en 2D.
Ejemplo
Recorte la lnea que va de
(-3/2,1/6) a (1/2,3/2)

Algoritmos de recorte
Algoritmo de recorte explcito en 2D. Ejemplo

Algoritmos de recorte
Algoritmo de recorte explcito en 2D. Ejemplo

Algoritmos de recorte
Algoritmo de Sutherland-Cohen

Algoritmos de recorte
Algoritmo de la subdivisin del punto medio

Ideal para
implementar
en hardware

Algoritmos de recorte
Algoritmo de Cyrus-Beck para recorte de
regiones convexas
El Algoritmo de Cyrus-Beck hace uso del hecho de que un punto a est dentro
de 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 cualquier


punto en ese borde

El Algoritmo de Cyrus-Beck hace uso de la ecuacin paramtrica de una


lnea recta que va de P1 a P2

Algoritmos de recorte
Algoritmo de Cyrus-Beck para recorte de
regiones convexas
podemos obtener el valor de t para el cual la lnea coincide con la frontera
del rea de recorte despejndolo de:

Donde f es cualquir punto de esa frontera

Algoritmos de recorte
Algoritmo de Cyrus-Beck para recorte de
regiones convexas. Ejemplo
Recortar la lnea que
va de (-1,1) a (3,3)

Algoritmos de recorte
Algoritmo de Cyrus-Beck para recorte de
regiones convexas. Ejemplo
La directrz es:
Para la arista V5V6 la normal es:

Algoritmos de recorte
Algoritmo de Cyrus-Beck para recorte de
regiones convexas. Ejemplo

Algoritmos de recorte
Algoritmo de Cyrus-Beck para recorte de regiones
convexas. Ejemplo
Repitiendo para el
Resto de las aristas
Completamos la tabla

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

Pipeline de visualizacin bidimensional

Coordenadas locales
Coordenadas mundiales
Puerto de visin
Funciones OpenGL para visualizacin 2D

Pipeline de visualizacin bidimensional


Coordenadas 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 bidimensional


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

Pipeline de visualizacin bidimensional


puerto 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 bidimensional


puerto 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 bidimensional


Funciones 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 geomtricas
Transformaciones afines
Una transformacin afn es aquella que puede
expresarse de la siguiente manera:
Qx
Qy

a.Px b.Py t x
c.Px d .Py t y

O bien:

Qx

a b

Px

tx

Qy

c d

Py

ty

Transformaciones geomtricas
Transformaciones 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 geomtricas
Transformaciones afines

Ejemplos de transformaciones afines:


Traslacin
Escalamiento
Rotacin
Reflexin
Cizallamiento

Transformaciones geomtricas
transformaciones geomtricas bidimensionales bsicas
Traslacin
Trasladamos un punto (x,y) mediante:

Transformaciones geomtricas
transformaciones geomtricas bidimensionales bsicas
Traslacin

Toda transformacin geomtrica tiene dos


interpretaciones:
v

Pasar de un sistema de
Coordenadas a otro

(2,3)

u=x-1

v=y-1
u

x=u+1
y=v+1

(2,3)
y

Modificar la forma o
posicin de objetos
en un sistema de
coordenadas

(1,2)

x=x-1
y=y-1

(1,2)

x=x+1
x

y=y+1

Transformaciones geomtricas
transformaciones geomtricas bidimensionales bsicas
Traslacin

Transformaciones geomtricas
transformaciones 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 geomtricas
transformaciones geomtricas bidimensionales bsicas
Rotacin
Obtenemos:

De la figura:

Finalmente!

Transformaciones geomtricas
transformaciones geomtricas bidimensionales bsicas
Rotacin

Se puede expresar matricialmente como:

La rotacin tambin implica una traslacin

Transformaciones geomtricas
Coordenadas 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 traslacin
2. Facilita la composicin de transformaciones.
Muchas transformaciones sucesivas se
convierten en una sola (gran ahorro!)

Transformaciones geomtricas
Coordenadas homogneas
Todas las transformaciones como productos matriciales:

Transformaciones geomtricas
Transformaciones 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 geomtricas
Transformaciones compuestas
Escalamiento respecto a un punto fijo

Ahora se aprecia la ventaja de trabajar en coordenadas homogneas

Transformaciones geomtricas
Transformaciones 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 geomtricas
Transformaciones compuestas
Rotacin respecto a un punto arbitrario

De nuevo se aprecia la ventaja de trabajar en coordenadas homogneas

Transformaciones geomtricas
Reflexiones
Reflexin respecto al eje x

Reflexin respecto al eje y

Transformaciones geomtricas
Reflexiones
Reflexin respecto al origen

Reflexin 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 simples


Rotacin 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 simples


Ejemplos

1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1

1.5 0 0 0
0 1.5 0 0
0 0 1.5 0
0

2 0 0 0
0 1 0 0
0 0 1 0

1 0 0 500
0 1 0 500
0 0 1 0

0 0 0 1

0 0 0

0.866
0.5 0 0
0.5 0.866 0 0
0
0
1.5 0
0

0.866
0.5 0 430.7
0.5 0.866 0 60.3
0
0
1
0
0

Transformaciones geomtricas
Rotacin respecto a un eje arbitrario
Si el eje es paralelo a uno
De los ejes del sistema de
Coordenadas:
1) Trasladar de manera que
Un punto que pasa por el
Eje de rotacin coincida
Con el origen
2) Rotar alrededor del eje
3) Traslacin inversa respecto
Al paso 1

Rotacin respecto a un eje arbitrario


Determinacin de la matriz de transformacin
por composicin de matrices

Rotacin respecto a un eje arbitrario


Determinacin de la matriz de transformacin por
composicin de matrices

Rotacin respecto a un eje arbitrario


Determinacin de la matriz de transformacin por
composicin de matrices

Rotacin respecto a un eje arbitrario


Determinacin de la matriz de transformacin por
composicin de matrices

Rotacin respecto a un eje arbitrario


Determinacin 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 arbitrario


bsqueda de un conjunto de vectores
ortogonales

u es el vector alrededor del cual se desea rotar

Rotacin alrededor de un eje arbitrario


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

Se cumple que
Adems

Rotacin alrededor de un eje arbitrario


usando 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 arbitrario


usando cuaterniones
Para rotar un punto p alrededor de un vector u un cierto ngulo teta
Realizamos 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 escalamiento
glScalef(Sx,Sy,Sz)
Para la rotacin
glRotatef(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 superior


y la pone encima de la pila, de tal forma que las dos matrices
superiores
son 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 3D
proyeccin en paralelo

En z=0:

Visualizacin 3D
proyeccin en paralelo
En forma matricial, en coordenadas homogneas

Visualizacin 3D
proyeccin en perspectiva
(xc,yc,yc)

En z=0:

Visualizacin 3D
proyeccin en perspectiva

Visualizacin 3D
Pipeline de visualizacin tridimensional

Pipeline de visualizacin 3D
Coordenadas 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
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)
x

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

(-0.5,-0.5,0.5)

(0.5,-0.5,0.5)

Pipeline de visualizacin 3D
Coordenadas mundiales
Al definir una escena, transformamos las coordenadas de
todos los objetos que la componen a un referente nico, por
ejemplo una de las esquinas de la habitacin.

Visualizacin 3D
Volumen de visin

Visualizacin 3D
Volumen de visin

Visualizacin 3D
Funciones 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 ocultas


Supresin de segmentos de lnea ocultos
Algoritmo del horizonte flotante

y
a

(1 / 5) senx cos z (3 / 2) cos(7a / 4) exp( a)


(x

(z

Supresin de lneas y superficies ocultas


Supresin 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 ocultas


Supresin 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 es
dibujada.

Supresin de lneas y superficies ocultas


Supresin de segmentos de lnea ocultos
Algoritmo del horizonte flotante

Si para algn valor dado de x, el valor y correspondiente de la curva


en el plano actual es superior al mximo valor o inferior al mnimo valor
entre 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 ocultas


Supresin 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 ocultas


Supresin de segmentos de lnea ocultos
Algoritmo del horizonte flotante

Supresin de lneas y superficies ocultas


Supresin de segmentos de lnea ocultos
Algoritmo del horizonte flotante

Supresin de lneas y superficies ocultas


Supresin de segmentos de lnea ocultos
Algoritmo del horizonte flotante

Supresin de lneas y superficies ocultas


Determinacin de la ecuacin de un plano
La ecuacin de un plano es:
O en su forma normalizada (d=1)

Supresin de lneas y superficies ocultas


Determinacin del vector normal a un plano
Si tenemos la ecuacin del plano:

Supresin de lneas y superficies ocultas


Deteccin 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 ocultas


Algoritmo del buffer Z o buffer de profundidad

Eliminacin de
caras posteriores

Eliminacin de
superficies
ocultas

Supresin de Lneas y superficies ocultas


Algoritmo 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 ocultas


Algoritmo del buffer Z o buffer de profundidad
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.

Los valores de profundidad de una


cara se pueden obtener a partir de la
ecuacin del plano correspondiente a
esa cara mediante

Supresin de Lneas y superficies ocultas


Algoritmo 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 pixels
sobreescriben 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 lnea
differen 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 nos


cambiemos 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 desplegarlos
completos 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 divisorio
divide 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 luz
N es el vector Normal
(perpendicular) a la
superficie
V 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:
Id

Ii,n Ln.N
n

Reflexin especular
Is = Iicosn

= Ii(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 luz
Ej 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 rayos
Ej Radiosidad

Modelado de la iluminacin

Iluminacin directa solamente


(Modelo de iluminacin local

Iluminacin directa e indirecta


(Modelo de iluminacin global)

Modelado de la iluminacin
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
I = kaIa + Ii(kd(L.N) + ks(R.V)n)

Modelado de la iluminacin
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
I = kaIa + Ii(kd(L.N) + ks(R.V)n)

Modelado de la iluminacin
Un coeficiente de reflexin es
la proporcin de luz incidente
que es reflejada por una
Ka es el coeficiente de reflexin de la
superficie.
superficie para la luz ambiental; kd es el
coeficiente de reflexin difusa y ks es el
coeficiente de reflexin especular

I = kaIa + Ii(kd(L.N) + ks(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

I = kaIa + fattIi(kd(L.N) + ks(R.V)n)

donde fatt=1/(d2)

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 = kaIa + Ii(kd(L.N) + ks(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 Ks
y de n
(Ka=0.7,
Kd=1.0 para
todas las
imgenes)

Determinacin del vector Normal a un


vrtice
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:
NA = (N1 + N2 + N3 + N4)/4

Determinacin del vector Normal a un


vrtice
Por supuesto, primero debemos determinar la normal en cada
plano
V = (x1,y1,z1)(x0,y0,z0)
W = (x2,y2,z2)(x0,y0,z0)
N = V x W
= (vx,vy,vz)x(wx,wy,wz)
= ((vywz- vzwy),
(x0,y0,z0)
(vzwx- vxwz),
(vxwy- vywx))
Cada N debe ser normalizada:
N = (Nx/|N|, Ny/|N|, Nz/|N|)
donde
|N| = sqrt(Nx2 + Ny2 + Nz2)

N
(x2,y2,z2)
W

V
(x1,y1,z1)

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 Gourad
la 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 modela


la reflexin especular
pero no la difusa

El mtodo es
dependiente de la
posicin del observador

Iluminacin por proyeccin de rayos


La proyeccin recursiva de rayos es un mtodo
que resuelve simultneamente los siguientes
problemas:
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

1
L
2

cos 2

1
cos1 N
2

Iluminacin por proyeccin de rayos


Ejemplo

Iluminacin por proyeccin de rayos


Ejemplo

Profundidad cero

Profundidad uno

Iluminacin por proyeccin de rayos


Ejemplo

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
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
cos i cos j
1
FAiAj Fij
dA jdA i
2
Ai
Aj
Ai
r

Si r es razonablemente grande

Fij

FdAiAj

cos i cos
Aj

dA j

Radiosidad
La analoga de Nusselt
dice 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

Radiosidad
Ejemplo

Radiosidad
Ejemplo

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 OpenGL
para desplegar los resultados

También podría gustarte