lunes, 19 de noviembre de 2012

Actividades V Unidad

5.1. Procesamiento de imágenes. 
 
La modificación o interpretación de imágenes existe en TV es conocida como procesamiento de imágenes.. Aunque los métodos empleados en los gráficos por computadora y el procesa- do de imágenes se solapan, las dos áreas están dedicadas a operaciones fundamentales diferentes. En los gráficos por computadora, la computadora se utiliza para crear una imagen. Por otra parte las técnicas de procesamiento de imágenes se utilizan para mejorar la calidad de un dibujo, analizar las imágenes o reconocer patrones visuales para aplicaciones robotizadas. Sin embargo, los métodos de procesamiento de imágenes se utilizan frecuentemente en los gráficos por computadora, y los métodos de los gráficos por computadora se aplican también en el procesamiento.
5.2. Visión por computadora.
El uso de métodos de gráficos por computadora como ayuda en el análisis científico y de ingenieria se deno- mina habitualmente visualización científica. Esta involucra la visualización de conjuntos de dalos y proce- sos que pueden ser difíciles o imposibles de analizar sin métodos gráficos. Por ejemplo, las técnicas de visualización se necesitan para tratar la salida de mentes de grandes volúmenes de datos como los monitores de las computadoras, escáneres de satélites y naves espaciales, telescopios de radioastronomía y escáneres médicos.
5.3. Animación por computadora
La mayoría de las veces, podemos crear secuencias simples de animación en nuestros programas utilizando métodos de tiempo real, pero en general, podemos producir una secuencia animada en un sistema de visuali- zóte ion por barrido generando una imagen cada vez y guardando dicha imagen completa en un archivo para su visualización posterior. La animación puede verse entonces recorriendo la secuencia completa de imágenes, o bien pueden transferirse esas imágenes a una película. Sin embargo, si queremos generar una imagen en tiempo real, debemos producir las imágenes de la secuencia con la suficiente rapidez como para que se per- ciba un movimiento continuo. Para una escena compleja, la generación de cada imagen de la animación puede ocupar la mayor parte del ciclo de refresco.
 
Usos de graficacion en la  medicina
La primera gran revolución en el terreno de la imagen médica vino de la mano de Wilhelm Conrad von Röntgen (1845-1923) al descubrir los rayos X el 8 de noviembre de 1895. La principal característica de este nuevo descubrimiento era que hacía visible el interior de los objetos, lo que desembocó en un aumento radical de la investigación de las imágenes anatómicas. Aprovechando la radiación de los rayos X (notar que los rayos X son una forma de radiación electromagnética) se consiguieron plasmar, a principios del XX, las primeras imágenes del interior del cuerpo humano, siendo la primera la de la mano de la esposa de Röntgen.
La segunda gran revolución fue el descubrimiento y desarrollo de una técnica basada en los rayos X por la que los físicos Allan MacLeod Cormack (1924) y Godfrey Newbold Hounsfield (1919-2004) recibirían el Premio Nobel de Fisiología o Medicina en 1979: la Tomografía Axial Computerizada (CT o TAC). El éxito de esta técnica viene de que una imagen obtenida en una CT consigue distinguir diferencias mínimas de intensidad, hecho que permitió, por ejemplo, diferenciar, a nivel cerebral, las sustancias gris y blanca.La tercera gran revolución lleva el nombre de Imagen por Resonancia Magnética (MR o MRI), que permite desde el estudio del cerebro de enfermos de esquizofrenia hasta el de los ligamentos de los deportistas. La MR es un fenómeno físico basado en las propiedades magnéticas que poseen los núcleos atómicos. Fue observado en 1946 por Felix Bloch (1905-1983) y Edward Mills Purcell (1912-1997) y se basa en que ciertos núcleos atómicosLa cuarta gran revolución, la ecografía, está muy ligada a un instrumento bélico, el sonar, desarrollado por científicos franceses durante la Segunda Guerra Mundial. Se trata de una técnica no invasiva basada en la utilización de ultrasonidos (ondas sonoras de alta frecuencia) para estudiar la estructura de los tejidos, diferenciando tejidos sanos de tejidos patológicos. Un aparato llamado transductor emite estos ultrasonidos sobre una zona del cuerpo.En los últimos años, el auge de la radiología intervencionista y la cirugía mini invasiva ha supuesto la  investigación y el desarrollo de nuevas técnicas y tecnologías capaces de minimizar el impacto de la acción médica en el paciente, las cuales conforman la quinta y última gran revolución en la imagen médica. Algunas de estas técnicas están basadas en, y/o utilizan, alguna de las anteriormente explicadas, pero otras suponen un avance extraordinario no sólo a nivel de la imagen en la medicina, sino en un contexto general a nivel imagen.
Usos de graficacion en la educación
A menudo, se utilizan como instrumentos de ayuda educativa modelos de sistemas físicos, financieros y económicos, los cuales se generan por computadora. Modelos de sistemas físicos, sistemas fisiológicos, tendencias de población o equipo, pueden ayudar a los estudiantes a comprender la operación del sistema. En el caso de algunas aplicaciones de capacitación, se diseñan sistemas especiales, como los simuladores para sesiones de práctica o capacitación de capitanes de barco, pilotos de avión, operadores de equipo pesado y el personal de control de tráfico aéreo. Algunos simuladores no tiene pantallas de video; por ejemplo, un simulador de vuelo que sólo tiene un panel de control como instrumento de vuelo.
Cruces entre lo virtual y lo real Hacer un mundo dentro de un mundo es inaugurar un conjunto de posibilidades de cruces y simulaciones. En cuanto a lo primero, en la charla se observó que ya es están produciendo vinculaciones entre el mundo real y el virtual en Second Life, que tienen como antecedente sucesos similares que se produjeron en los juegos de rol. 
Usos de graficacion en la publicidad
La mejor publicidad gráfica siempre ha sido venerada y elevada a la categoría de arte. Propuestas creativas, fotografía, tecnología aplicada a la imagen, etc... Todos son ingredientes de una fórmula donde existe un componente especial. El mensaje.Sin duda el elemento quizás más importante de toda pieza artística y creativa, y como no, también de los anuncios de la publicidad gráfica donde el objetivo principal se fundamente en conseguir la forma más eficaz de transmitirlo sin necesidad apenas de recurrir a las palabras.
Usos de graficacion en el entretimiento
Es muy común utilizar métodos de gráficas por computadora para producir películas, videos musicales y programas de televisión.El objetivo de los videojuegos, como medio de ocio, siempre ha sido el de entretener al usuario, desde sus inicios a nuestros días se ha mantenido esta máxima, pero tanto en el contenido como en la apariencia estos han evolucionado a pasos agigantados, avivados entre otras cosas por el rápido desarrollo de diferentes tecnologías. Tanto han evolucionado los videojuegos, que cada vez nos es más difícil relacionar los juegos pioneros con las grandes superproducciones que se lanzan hoy día.
 
 

Galleta de Jengibre


domingo, 11 de noviembre de 2012

Resumen U4

Como activar las fuentes de luz en OPEN GL

El cálculo del color se realiza en cada vértice según las luces que haya encendidas y las propiedades del material de dicho vértice, no tiene en cuenta posibles oclusiones de terceros objetos que producirían sombras, reflejos de la luz que permitiría tener espejos o refracciones de la luz para ver a traves de materiales como el agua.
Luces
Para habilitar el modo de iluminación se realiza con la función glEnable(GL_LIGHTING), cuando renderizamos en este modo la instrucción glColor no tienen ninguna influencia ya que el color resultante de cada vértice es calculado a partir de los materiales del vértice y las luces que haya encendidas.
 
Disponemos de ocho luces que podemos encender o apagar con la función glEnable(GL_LIGHTi) donde i =[0..7]. Cada luz la podemos configurar estableciendo los siguientes parámetros con la función glLight{if}v :
ParametroValor por defectoSignificado
GL_AMBIENT(0.0, 0.0, 0.0, 1.0)intensidad ambiente de la luz
GL_DIFFUSE(1.0, 1.0, 1.0, 1.0) GL_LIGTH0
(0.0, 0.0, 0.0, 1.0) GL_LIGTH1-GL_LIGHT7
intensidad difusa de la luz
GL_SPECULAR(1.0, 1.0, 1.0, 1.0) GL_LIGTH0
(0.0, 0.0, 0.0, 1.0) GL_LIGTH1-GL_LIGHT7
intensidad especular de la luz
GL_POSITION(0.0, 0.0, 0.0, 1.0)(x, y, z, w) posición de la luz
GL_SPOT_DIRECTION(0.0, 0.0, -1.0)(x, y, z) dirección de la luz
GL_SPOT_EXPONENT0.0exponente del foco
GL_SPOT_CUTOFF180.0angulo de abertura del foco
GL_CONSTANT_ATTENUATION1.0factor de atenuación constante
GL_LINEAR_ATTENUATION0.0factor de atenuación lineal
GL_QUADRATIC_ATTENUATION0.0factor de atenuación cuadratico
 
Como Calcular la normal para cada vertice en opengl ?
Normales
Una de las características que se puede establecer de un vértice es el color (o el material si estamos en modo iluminacion), pero podemos establecer otras características como la coordenada de la textura o la normal que sirve para realizar los calculos de la iluminación resultante. No importa el orden en que se definan las características pero siempre se hará antes de definir el vértice.
glColor3f(1.0, 0.3, 0.4); // Color del vértice
glNormal3f(1.0, 0.0, 0.0); // Normal del vértice
glTexCoord2f(0.0, 1.0); // Coordenada de la textura
glVertex3f(1.0, 3.2, 3.6); // Vértice
 
3ejemplos de codigo en opengl manejando iluminación :

1) Luz en un punto fijo de la escena
GLfloat lightPos[4] = {1.0, 4.0, 7.5, 1.0}; // Luz direccionalvoid Display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt(posx, posy, posz, eyex, eyey, eyez, upx, upy, upz);
glPushMatrix();

// Aqui podriamos aplicar alguna transformación para mover la luz
glLightfv(GL_LIGHT0, GL_LIGHT_POSITION, lightPos);

// Aqui dibujamos la luz
glPushAttrib(GL_LIGHTING_BIT); // Guardamos el estado de las luces
glDisable(GL_LIGHTING); // Deshabilitamos las luces
glutSolidSphere(1.0, 25, 25); // Dibujamos la luz para que sepamos donde esta
glPopAttrib(GL_LIGHTING_BIT); // Restauramos el estado de las luces
glPopMatrix();
// Dibujamos la escenaglTranslatef(0.0, 0.0, -5.0);
glutTeaPot(1.0);

glutSwapBuffers();
}
 
2) Luz con relación a la cámara
GLfloat lightPos[4] = {1.0, 4.0, 7.5, 1.0}; // Luz direccionalvoid Display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();

glPushMatrix();
// Aqui podriamos aplicar alguna transformación para mover la luz
glLightfv(GL_LIGHT0, GL_LIGHT_POSITION, lightPos);

// Aqui dibujamos la luz
glPushAttrib(GL_LIGHTING_BIT); // Guardamos el estado de las luces
glDisable(GL_LIGHTING); // Deshabilitamos las luces
glutSolidSphere(1.0, 25, 25); // Dibujamos la luz para que sepamos donde esta
glPopAttrib(GL_LIGHTING_BIT); // Restauramos el estado de las luces
glPopMatrix();
gluLookAt(posx, posy, posz, eyex, eyey, eyez, upx, upy, upz);// Dibujamos la escenaglTranslatef(0.0, 0.0, -5.0);
glutTeaPot(1.0);

glutSwapBuffers();
}
 3) Poligono
glBegin(GL_POLYGON);
glColor3f(1.0f,1.0f,1.0f);
glVertex3f(-10,15,0);
glColor3f(0.0f,0.0f,0.0f);
glVertex3f(10,5,0);
glColor3f(1.0f,0.0f,0.0f);
glVertex3f(10,-5,0);
glColor3f(0.0f,1.0f,0.0f);
glVertex3f(0,-10,0);
glColor3f(0.0f,0.0f,1.0f);
glVertex3f
glEnd();
 
Producirá una imagen como esta:
Color

jueves, 25 de octubre de 2012

Tecnicas de sombreado clasicas y avanzadas


Iluminación local.

Luces que no son extensas, como las reales, sino inextensas, puntuales. Y, por añadidura, se relacionan con los objetos como mónadas aisladas, sin tener en cuenta la interacción entre ellos. Esto explica lo artificioso de muchas de las técnicas que se describirán más adelante y que buscan compensar estas limitaciones.

Las insuficiencias de los métodos de iluminación local se han superado en parte por medio de sistemas de iluminación global que permiten tomar en cuenta la interacción entre objetos. Las dos técnicas principales son el trazado de rayos (ray tracing) y la radiosidad (radiosity)






Calculos de iluminación por vértices

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 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 los triángulos.

Realistas: Iluminación global

Son sencillos y rápidos pero proporcionan imágenes muy simples, que no representan adecuadamente el modo en que la luz ilumina los objetos y los espacios. Esto no quiere decir que no sean útiles para un gran número de casos, y es muy importante calibrar adecuadamente que es lo que se necesita, pues puede muy bien ocurrir que un cálculo local proporcione imágenes relativamente esquemáticas pero más adecuadas para la representación de un proyecto.

Los métodos principales que existen en la actualidad pueden considerarse como desarrollos, con diferentes variantes, de los dos métodos principales que surgieron en la década de los 1980, ray tracing (introducido por T.Whitted en 1980) y radiosity (hacia 1984 por varios autores). Una base téorica más firme para los algoritmos y métodos de GI (Global Illumination), vino con la publicación, por Kajiya, en 1986 de la rendering equation, que puede encontrarse en un manual especializado

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. 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 iluminará a su vez a los objetos que le rodean.

Casi todos los modelos de iluminación necesitan conocer la normal de cada superficie para calcular su color.

 El primero, llamado método de Gouraud, efectúa una interpolación a partir de los colores calculados por los vértices del polígono, en los que se conoce la normal. El segundo llamado método de Pong, interpola la normal en el punto en estudio a partir de las normales en los vértices, calculando a continuación el color con la ayuda de esta normal según el modelo de iluminación elegido.




Cálculos de iluminación por pixel

Iluminación por fragmento (por pixel) puede ser elaborada en hardware de gráficos moderno como un proceso de post-rasterización por medio de un programa de shader.
Pixel Shader (PS) como un pequeño programa que procesa fragments (algo así como pixelscon más datos) y que se ejecuta en la GPU. Al crear un PS, se crea una función de procesado de fragmentos que manipula datos de fragmentos.

Frecuentemente necesitan datos del VS, llegando incluso a veces a ser “conducidos” por éste. Por ejemplo, para calcular una iluminación por pixel, el PS necesita la orientación del triángulo, la orientación del vector de luz y en algunos casos la orientación del vector de vista.



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


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.



•    Interpolación de Intensidades (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 polígono

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).

Sombreado de Phong

• Se basa en la interpolación de la dirección de la normal, calculada de la misma forma que antes.
• Igual que en Gouraud, se interpola a lo largo de cada línea de barrido, entre los puntos inicial y final, interpolados a su vez de los valores de los vértices de la arista.
• Captura mejor los brillos especulares en el medio de facetas planas (Gouraud los puede omitir).
Produce mejores resultados, a un coste computacional mayor (hay que incrementar la dirección de la normal en tres direcciones, normalizarla y calcular la ecuación de sombreado encada punto)
• Si el coeficiente de reflexión especular es pequeño, los resultados no difieren tanto (se pueden combinar objetos sombreados por ambos métodos en una escena).



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 el lente de la cámara sintética y pasan por el centro de proyección.

Buffer de Profundidad.

El Z-Buffer se basa en que al generar la posición de un punto en la pantalla la computadora reserve una zona de memoria especial, llamada Z-Buffer, información relacionada con la profundidad del punto que ocupa en la escena representada. Cuando el ordenador representa un nuevo punto consulta el Z-Buffer del píxel que corresponde en pantalla. Si el valor que ya existe en el píxel es mayor que el que posee el nuevo punto, el sistema asume que este último es el visible y lo sustituye en la memoria del Z- Buffer.

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.

 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. Este aspecto no será tomado en cuenta en los modelos más sencillos.

Fuentes de Luz Distantes

La mayoría de los cálculos de sombreado requieren la dirección de un punto sobre la superficie a la fuente de luz. Según se mueve a lo largo de la superficie, se debe recomputar este vector para calcular la intensidad en cada punto, una computación que es una parte significativa del cálculo del sombreado. Sin embargo, si la fuente de luz está lejos de la superficie, el vector no cambiará mucho según se mueve de un punto a otro, al igual que la luz del sol da en todos los objetos cercanos entre si con el mismo ángulo.



Fuentes de Color

No solamente las fuentes de luz emiten diferentes cantidades de luz en diferentes frecuencias, pero también sus propiedades direccionales varían con la frecuencia. Por lo tanto, un modelos físicamente correcto puede ser muy complejo. Para la mayoría de las aplicaciones, se puede modelar fuentes de luz en base a tres componentes primarios, RGB, y puede usar cada uno de los tres colores fuentes para obtener el componente de color correspondiente que un observador humano vería.



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.

En algunos cuartos, las luces se diseñan y ubican para proveer iluminación uniforme en el cuarto. Tal iluminación se logra mediante fuentes grandes con difusores cuyo propósito es esparcir la luz en todas las direcciones. Se puede crear una simulación precisa de tal iluminación, modelando todas las fuentes distribuidas, y luego integrando la iluminación de estas fuentes en cada punto de una superficie reflectora. Hacer tal modelo y generar la escena sería un tarea formidable para un sistema gráfico, especialmente si se desea ejecución en tiempo real. De manera alternativa, se puede ver el efecto deseado de las fuentes: lograr un nivel de luz uniforme en el cuarto. Esta iluminación uniforme se llama luz ambiente. Si se sigue este segundo enfoque, se puede postular una intensidad ambiente en cada punto del ambiente. Por lo tanto, iluminación ambiente se caracteriza por una intensidad Ia, que es idéntica en cada punto de la escena.

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 θ.



Aquí se incluyen varias imágenes obtenidas de una implementación de la práctica. Los colores y la orientación de las fuentes de uz son las que se pueden observar en segundo panel más arriba. Los valores de ka,kd, ks y m son los que se indican en cada imagen:




miércoles, 24 de octubre de 2012

Piramide Giratoria U3


#include <GL/glut.h>
 


GLfloat anguloCuboX = 0.0f;
 GLfloat anguloCuboY = 0.0f;
 GLint ancho=500;
 GLint alto=500;
 int hazPerspectiva = 0;
  void reshape(int width, int height){   
   glViewport(0, 0, width, height);   
   glMatrixMode(GL_PROJECTION);   
   glLoadIdentity();       
   if(hazPerspectiva)    
    gluPerspective(60.0f, (GLfloat)width/(GLfloat)height, 1.0f, 20.0f);   
   else
       glOrtho(-4,4, -1, 4, -5, 10);   
   glMatrixMode(GL_MODELVIEW);    
   ancho = width;   
   alto = height;
  }

 void Piramide(void){    //Piramide


//Cara Fontral
   glShadeModel(GL_SMOOTH);
  
  glColor3f(1.0, 0.0, 0.0);
  glBegin(GL_POLYGON);
 
   glVertex3f(0.0, 1.0,  0.0);   
   glVertex3f( 1.0f, 0.0f,  1.0f);   
   glVertex3f( 0.0f,  1.0f,  0.0f);
   glEnd();   


 
 //cara trasera
  glShadeModel(GL_SMOOTH);
  //glColor3f(0.0f, 1.0f, 0.0f);
     glBegin(GL_POLYGON);      
    glColor3f(1.0f, 1.0f, 1.0f);
  glVertex3f(-1.0f, 0.0f,  -1.0f);   
     glVertex3f( 1.0f, 0.0f,  -1.0f);
  glColor3f(0.0f, 1.0f, 0.0f);
  glVertex3f( 0.0f,  1.0f,  0.0f);
     glEnd();   

//cara lateral izquierda


 glShadeModel(GL_SMOOTH);
  //glColor3f(0.0, 1.0, 1.0);   
     glBegin(GL_POLYGON);         
     glVertex3f(-1.0f, 0.0f,  1.0f);
   glColor3f(0.0, 1.0, 1.0);
     glVertex3f( -1.0f, 0.0f, -1.0f);   
  glVertex3f( 0.0f,  1.0f,  0.0f);   
  glEnd();   

//car later der

 glShadeModel(GL_SMOOTH);
 // glColor3f(1.0f, 1.0f, 0.0f);   
     glBegin(GL_POLYGON);      
  glVertex3f(1.0f, 0.0f,  1.0f); 
  glColor3f(1.0f, 0.0f, 0.0f);
     glVertex3f( 1.0f, 0.0f,  -1.0f);   
  glVertex3f( 0.0f,  1.0f,  0.0f);
  glEnd();

//Base
   
  
  glShadeModel(GL_SMOOTH);
 // glColor3f(1.0f, 0.0f, 1.0f);   
  glBegin(GL_QUADS);
  glVertex3f( 1.0f,0.0f, -1.0f);   
  glVertex3f( 1.0f, 0.0f,  1.0f);
  glColor3f(1.0f, 1.0f, 0.0f);
  glVertex3f(-1.0f,0.0f,  1.0f);  
  glVertex3f(-1.0f, 0.0f, -1.0f);   
  glEnd();

 }

 //
  void display(){
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);    
   glLoadIdentity();    
  glScalef(2.5f, 2.5f, 2.5f);//aumentar
   glRotatef(anguloCuboY, 0.0f, 1.0f, 0.0f); 
  
  
   Piramide();    
   
   glLoadIdentity();    
   glFlush();   
  
  
   glutSwapBuffers();  

  anguloCuboX+=0.1f;  
   anguloCuboY+=0.1f;

 
  }

 void init(){
   glClearColor(0,0,0,0);   
   glEnable(GL_DEPTH_TEST);   
   ancho = 400;   
   alto = 400;
  }
 void idle(){  display();  }

 int main(int argc, char **argv){   
  
   glutInit(&argc, argv);   
   glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);   
   glutInitWindowPosition(100, 100);   
   glutInitWindowSize(ancho, alto);  
   glutCreateWindow("Piramide Que gira en su propio eje");   
   init();   
   glutDisplayFunc(display);   
   glutReshapeFunc(reshape);   
   glutIdleFunc(idle);   
   glutMainLoop();   
   return 0;

 }