Unidad IV.- Iluminacion y sombreado

Como se agregan rellenos de poligonos en openGL.

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.

Definiciones unidad IV.
Tecnicas de sombreado clasicas y avanzadas.
Clasicas: iluminacion local.
Calculos de iluminacion por vertices.


Para poder aplicar iluminación necesitamos asociar a cada vértice de nuestro objeto un vector normal asociado. 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,

glEnable GL_NORMALIZE

o desactivarla con,

glDisable GL_NORMALIZE

el usar
GL_NORMALIZE dependerá de nuestra aplicación ya que forzando a que sea OpenGl que las utilice se ralentiza ya que le estamos 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

Es decir, cada vez que queremos definir una normal a un vértice usamos
glNormal y el vértice/s que siguen se asocian a esta normal.
La luz de tipo SMOOTH el polígono que definamos tendrá un color definido par cada vértice, asociando las normales a los vértices OpenGL puede hacer los cálculos de los colores a cada uno del vértice y después hace una interpolación de colores con este tipo de luz se acerca bastante al realismo pero a un la podemos mejorar.

Posterior relleno de triangulos.

Rellenado de los triángulos (rastering). Para ello se realizan varias fases de procesamiento por Pixel. Comprobar si cada nuevo pixel es visible o no (comprobación de profundidad).
Interpolación lineal del color para el nuevo pixel (método de Gouraud).
Si existe una textura definida o transparencia, efectuar la modificación de color correspondiente.
Se trata de la última fase, en ocasiones la más costosa, del proceso, por lo que es la primera que se suele integrar en el hardware gráfico. En esta etapa se trata de asignar colores a los pixels correspondientes al interior de cada triángulo proyectado que cae dentro del área de visualización. Los colores asignados deben calcularse por el método de Gouraud, interpolando linealmente entre los colores de los tres vértices.

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 triangulos. Cada triangulo será proyectado sobre laventana bidimensional y rellenado con los colores adecuados para reflejar los efectos de la iluminación, texturas, etc. Ua vez se han generado los triangulos, en la pipeline existen dos partes claramente diferenciadas: uina primera etapa operaciones realizadas sobre cada uno de los vértices, y después de que estos se proyecten sobre la ventana, entonces comienza una segunda fase de cálculos realizados para cada pixel cubierto por los triangulos.

Realistas: iluminacion global.
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.

Trazado de rayos.

El trazado de rayos computa la interaccion de la luz desde un punto de vista determinado y es particularmente adecuado para superficies reflectantes. Puede utilizarse como propiedad especifica de un determinado material.


Radiosidad.

Esta basado en principios generales que se pueden encontrar en un manual general sobre rendering. En el estado 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 en una aproximación mas exacta, cada parte de un objeto, según una subdivisión cuya densidad puede percisarse en sucesivas aproximaciones. Cada una de estas partes, según su grado de reflexividad, su orientación y su distancia con respecto a las fuentes de luz original, se convertirá en una segunda vuelta, en un nuevo emisor de energía lumínica, una fuente de luz secundaria que iluminara a su vez a los objetos que le rodean.

Calculos de iluminacion 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. La potencia de NSR eleva la calidad de la experiencia multimedia que ofrecen las GPU NVIDIA. NSR mantiene la alta resolución en entornos dinámicos y proporciona la experiencia de juego más impactante.

Sombreado constante o plano.
Un calculo para todo el poligono.

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.

Interpolacion de densidades (Gouraud).

Se basa en la interpolación de intensidad o color.
Considera que facetas planas vecinas proceden deaproximar una superficie curva (salvo que se  declare una arista real entre ambas) 
* Elimina en gran medida las discontinuidades de iluminación 
* Es sencilla, pero produce peores resultados en objetos con brillos especulares que el método      de Phong.
 *Implementado en OpenGL

Calcula normales al poligono.

La iluminación cte. no produce buenos resultados en superficies curvas (aprox. por facetas planas).

Evaluar la ecuación de iluminación en cada punto de una superficie genérica es muy costoso. Posible solución: aproximar mediante facetas planas e interpolar dentro de cada  polígono. Hay que evitar producir una apariencia “faceteada” (bandas de Mach; respuesta del ojo humano).

Intensidad completa.

La intensidad completa exclusivamente por efectos de iluminación es la siguiente:

No hay comentarios:

Publicar un comentario