4.1 Relleno de polígonos
Color de relleno
Para elegir el color de los
polígonos, basta con hacer una llamada a glColor entre la definición de cada polígono.
Por ejemplo, modificando el código que dibujaba dos triángulos:
glBegin(GL_TRIANGLES);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3f(0.0f,0.0f, 0.0f);
glVertex3f(2.0f,0.0f, 0.0f);
glVertex3f(1.0f,1.0f, 0.0f);
glColor3f(0.0f,1.0f, 0.0f);
glVertex3f(-1.0f,0.0f, 0.0f);
glVertex3f(-3.0f,2.0f, 0.0f);
glVertex3f(-2.0f,0.0f, 0.0f);
glEnd();
Esta modificación provocará
que el primer triángulo se pinte en rojo y el segundo en verde. La función glColor
define el color de rellenado actual y lleva como parámetros los valores de las
componentes RGB del color deseado y, opcionalmente, un cuarto parámetro con el
valor alpha. Estos parámetros son flotantes y se mueven en el rango [0.0,1.0].
Con ello se pueden componer todos los colores del modo de video usado en ese
instante.
Rellenos de Polígonos en OpenGL.
Es el método que utiliza
OpenGL para rellenar de color los polígonos. Se especifica con la función
glShadeModel. Si el parámetro es GL_FLAT, ogl rellenará los polígonos con el
color activo en el momento que se definió el último parámetro; si es GL_SMOOTH,
ogl rellenará el polígono interpolando los colores activos en la definición de
cada vértice.
Este código es un ejemplo de
GL_FLAT:
glShadeModel(GL_FLAT);
glBegin(GL_TRIANGLES);
glColor3f(1.0f, 0.0f, 0.0f); // activamos el color rojo
glVertex3f(-1.0f, 0.0f, 0.0f);
glColor3f(0.0f, 1.0f, 0.0f); // activamos el color verde
glVertex3f(1.0f, 0.0f, 0.0f);
glColor3f(0.0f, 0.0f, 1.0f); // activamos el color azul
glVertex3f(0.0f, 1.0f, 0.0f);
glEnd();
Técnicas
de sombreado clásicas y avanzadas
Clásicas:
iluminación local
Cálculos de iluminación por vértices
Para aplicar iluminación a un
objeto necesitamos asociar un vector normal a cada vértice del objeto. Cuando tenemos la normal calculada tenemos
que normalizarla, o sea, dividir ese vector por su propio modulo para que sea
unitario, pero también podemos hacer que se encargue la OpengGl activando la
normalización con el comando glEnable GL_NORMALIZE o desactivarla con glDisable
GL_NORMALIZE.
El usar GL_NORMALIZE dependerá
de nuestra aplicación ya que si forzamos a que sea OpenGl el que las utilice se
ralentiza por que le estamos obligando a hacer mas cálculos de los que debe.
Para definir las normales en
opengl utilizaremos la función glNormal3f(X,Y,Z) por ejemplo para definir una
cara con 4 vértices la definiremos de la siguiente manera:
GlBegin GL_QUADS
glNormal3f nX,nY,nZ
glvertex3f x,y,z
glvertex3f x,y,z
glvertex3f x,y,z
glvertex3f x,y,z
glEnd
Renderizado en Tiempo real
La idea fundamental del
procesado en tiempo real es que todos los objetos deben ser descompuestos en
polígonos. Estos polígonos serán descompuestos a su vez en triángulos. Cada
triángulo será proyectado sobre la ventana bidimensional y rellenado con los
colores adecuados para reflejar los efectos de la iluminación, texturas, etc.
Una vez se han generado los triángulos, en la pipeline existen dos partes
claramente diferenciadas: una primera etapa operaciones realizadas sobre cada
uno de los vértices, y después de que éstos se proyecten sobre la ventana,
entonces comienza una segunda fase de cálculos realizados para cada pixel
cubierto por triángulos.
Iluminación global
•
Considera la luz reflejada por un punto teniendo en cuenta toda la luz
que llega
•
No solo procedente de las luces
•
Efectos
–
producen sombras
–
reflexión de un objeto en los otros
–
transparencias
Trazado de Rayos
El trazado de rayos computa la interacción de
la luz desde un punto de vista determinado y es particularmente adecuado para
superficies reflectantes. Puede utilizarse como propiedad específica de un
determinado material.
Radiosidad
Está basado en principios
generales que se pueden encontrar en un manual general sobre rendering. En el
estadio inicial la escena consta de dos tipos de objetos: objetos que emiten
luz y objetos que reciben luz. A partir de aquí, en una primera vuelta, se computa
la luz que recibe cada objeto o, en una aproximación más exacta, cada parte de
un objeto, según una subdivisión cuya densidad puede precisarse en sucesivas
aproximaciones.
Cálculos de iluminación por pixel
La iluminación por píxel en
tiempo real es una tecnología revolucionaria ofrecida como primicia por NVIDIA
Shading Rasterizer. La iluminación dinámica a nivel de píxel libera a los
desarrolladores de las restricciones de otros sistemas de iluminación y pone a
su alcance toda una gama de sofisticados efectos. Antes de que el color final
del píxel sea decidido, un cálculo de iluminación debe ser computado para
sombrear a los píxeles basados en alguna luz que puede estar presente en la
escena.
Alto Acabado
Sombreado Constante o plano.
Un cálculo para todo el polígono. Obtenemos una intensidad que aplicamos
a un conjunto de puntos de un objeto (p.ej. todo un triángulo). Aceleramos el
proceso de síntesis. Correcto si se verifica: Fuente de luz en el
infinito. Observador en el infinito. El polígono representa una superficie
plana real del objeto que se modela y no es una aproximación de un objeto
curvo.
Sombreado Constante o Plano
Obtenemos una intensidad que aplicamos a un
conjunto de puntos de un objeto
*Aceleramos el proceso de síntesis
*Correcto si se verifica.
* Fuente de luz en el infinito
*Observador en el infinito
Sombreado de Gouraud
• Es un método todo incremental que una interpolación
de intensidades.
• En cada vértice del polígono
se calcula la intensidad. La intensidad de los puntos intermedios se calcula
por interpolación bilineal.
Cálculo
11 Calcular intensidad en los vértices
1.1. Calcular normal en el vértice: para
evitar visualizar las aristas la normal se calcula como la las aristas, la
normal se calcula como la media de las normales de polígonos adyacentes.
1.2. Calcular la intensidad
del vértice Iv según el modelo
de iluminación de Phong
2. Calcular la intensidad de
los puntos interiores p p por interpolación lineal de las de los vértices.
Sombreado de Phong
• Es un método todo
incremental que realiza una interpolación de normales (en vez de interpolación de intensidades).
• En cada vértice del polígono
se calcula la normal como media de las normales de los polígonos adyacentes. La
normal de los adyacentes. La normal de los puntos intermedios se calcula
por interpolación lineal.
• En cada punto se aplica el
modelo de iluminación de Phong.
Cálculo
• 1 Calcular normal en los vértices
– Como en el sombreado de
Gouraud, para evitar visualizar las aristas, la normal se calcula como la media
de las normales de los polígonos adyacentes.
• 2. Calcular la normal de los
puntos interiores por interpolación lineal de las de los vértices.
• 3. Calculo de la intensidad:
– Calcularla en cada punto mediante
el modelo de iluminación de Phong.
– Ahora se puede introducir
también la reflexión especular
Ray Tracing
En muchas formas, ray tracing
es una extensión al enfoque de rendering con un modelo de iluminación local.
Está basado en la observación previa que, de los rayos de luz saliendo de una
fuente, los únicos que contribuyen a la imagen son aquellos que entran al lente
de la cámara sintética y pasan por el centro de proyección.
Buffer Stencil.
Stencill Buffer es una memoria
intermedia que analiza y actualiza píxeles (con sus operaciones) junto con
“depth buffer” o buffer de profundidad. Añade planos de bits adicionales para
cada píxel además de los bits de color y profundidad.
Stencil buffer es similar al buffer de
profundidad en que los dos son colección de planos de bit que no se pueden
mostrar. Del mismo modo que el buffer de profundidad asocia a cada píxel de la
ventana un valor de profundidad, el stencil buffer asocia su propio valor a
cada píxel mostrado. Cuando el buffer de profundidad esta activado los valores
de profundidad son usados para aceptar o rechazar fragmentos, del mismo modo
los valores de Stencil buffer son usados para aceptar o rechazar fragmentos.
Buffer de Acumulación
Normalmente se usa un buffer
de acumulación para unir dos imágenes
Fuentes de Luz
La luz puede dejar una
superficie mediante dos procesos fundamentales:
•
Emisión propia
•
Reflexión
Normalmente se piensa en una fuente de luz
como un objeto que emite luz solo mediante fuentes de energía internas, sin
embargo, una fuente de luz, como un foco, puede reflejar alguna luz incidente a
esta del ambiente.
Fuentes de Luz
La luz puede dejar una
superficie mediante dos procesos fundamentales:
·
Emisión propia
·
Reflexión
Luz Ambiente
La luz ambiente ilumina por
igual todas las zonas en sombra para simular el efecto de interacción entre
objetos que hace que las partes en sombra de los objetos queden parcialmente
iluminadas.
Spotlights (direccionales)
Los spotlights se caracterizan
por un rango delgado de ángulos por los cuales se emite luz. Se puede construir
un spotlight sencillo de una fuente de punto limitando los ángulos de donde la
luz de la fuente se puede ver. Se puede usar un cono cuyo ápice está en ps,
apuntando en la dirección ls, y cuyo ancho está determinado por el ángulo θ.
Fuentes:
http://cannes.itam.mx/Alfredo/Espaniol/Cursos/Grafica/Sombreado.pdf
http://dac.escet.urjc.es/docencia/IG/08-IluminacionSombreado4.pdf
http://sabia.tic.udc.es/gc/Tutorial%20OpenGL/tutorial/cap3.htm
No hay comentarios:
Publicar un comentario