lunes, 2 de diciembre de 2013

PROYECTO FINAL.


Descripción del problema central:

Proyecto de creación, y modernización de un espacio de trabajo y estudio en Instituto Tecnológico De Orizaba.

Dentro del Instituto Tecnológico de Orizaba se encuentra un edificio, el cual nunca se terminó. Este edificio ya tiene muchos años en “Obra negra” es por eso que nuestro programa busca terminar y remodelar este edificio con el fin de que dentro se pueda tener una oportunidad académica para los alumnos de la institución.


Justificación:

Con esto se refiere a tener un aula necesaria como un centro de cómputo para aquellos alumnos que no cuentan con una computadora o internet en su casa y puedan realizar sus trabajos, tareas, etc.

Este proyecto se realizaría en la parte donde se encuentra posgrado, en nuestra institución ya que se cuenta con una construcción abandonada, la cual desconocemos cuál era su principal objetivo. Y ya que dicha construcción aún no se le ha dado un uso, la podemos usar con este fin, ya especificado anteriormente.

Así mismo debe reunir características especiales de iluminación, espacios apropiados para el tránsito de usuarios y desplazamientos del personal, y podemos ver que es bastante amplio para llevar a cabo este proyecto.


Objetivo General:

Es necesario dotar a la institución de una nueva instalación física, con el equipamiento necesario ofreciendo un espacio de dicha aula para que se lleve a cabo su óptimo desarrollo. Otorgándoles un espacio y una nueva oportunidad para mejorar su nivel educativo.


Objetivos Específicos:


Reconocer la población estudiantil y cubrir sus necesidades, para el fortalecimiento de la capacidad y competitividad académica.

Acondicionando el área generando un lugar luminoso y visualmente apropiado, dotándolas de recursos necesarios para así promover oportunidades para la ampliación de conocimientos y la formación avanzada de profesionales calificados.


Delimitación del tema de estudio:


El área específica es para todos los que estudiamos en el Instituto Tecnológico de Orizaba.

Como tema general como ya habíamos mencionada antes es para los alumnos del instituto que no cuentan con el recurso de una computadora o internet en sus casas para que realicen sus tareas o actividades. Así como delimitación vemos que aunque el espacio no está ocupado o aun las autoridades del instituto no han visto en que se le dará utilidad a ese espacio, vemos que puede que se le dé a ese espacio otra utilidad y no en la que nosotros tenemos pensada, también como vemos requiere de tiempo ya que aproximadamente este será en un lapso aproximado de 2 años, otra delimitación seria el costo de los materiales para terminar su construcción y las debidas adecuaciones que se le harán a esta área, así como las computadoras necesarias.


Software utilizado y justificación:

Inventor 2010.



Es un programa de dibujo técnico desarrollado por Autodesk para el uso de ingenieros, técnicos y otros profesionales de carreras de diseño. Este así mismo lo podemos usar para diseños técnicos, y es muy útil para ingenieros, arquitectos, etc.

Pudiendo crear diseños de todo tipo en 2d y 3d, planos, objetos, cortes de objetos, etc; ya que su interfaz es muy amigable y es uno de los programas más completos.


Desarrollo de interfaz:


Asistido por computadora, en el cual aplicaremos un Método Gráfico interactivo para proyectar la figura interior y exterior de nuestro edifico, así como sus diferentes características, en el cual mostramos como quedo nuestro diseño para que se aprecie mejor.

Primero para la elaboración del edificio empezamos con lo más sencillo las escaleras, después seguimos con el piso, la pared dándole un grosor de 40 cm, mesa de las computadoras y sus respectivas separaciones, las ventanas, paredes laterales, pared donde se encuentra la puerta y la puerta.


Experiencias que nos dejó el proyecto:


Esta clase nos dejó una gran experiencia para el resto de nuestras carreras, esto debido a que aprendimos las características de cómo modelar o graficar, la Profesora desde un inicio nos explicó cómo llevaríamos a cabo todo el curso, el cual fue muy interactivo tanto personalmente como virtualmente. Dentro del salón tuvimos que hacer equipos lo cual nos ayuda en la interacción con otras personas con esto aprendemos que no toda la vida trabajaremos solos, lo que busca una empresa es un ingeniero con una buena comunicación entre sus compañeros y esta forma de evaluación en equipo resulta una excelente manera de mejorar ese aspecto en nosotros, al igual la interacción con la computadora fue muy productiva ya que la maestra nos encargó un proyecto el cual debíamos de ir desarrollando durante el semestre, en este proyecto se nos pidió utilizar lo aprendido durante el curso lo cual refuerza nuestros conocimientos, la maestra fue muy accesible en cuanto al uso del programa, ya que nos permitió usar el programa al cual nos adaptáramos mejor.

Así que con esto la Profesora nos enseñó el alto grado de responsabilidad que es que trabajemos en equipo, al igual ser responsables con nosotros mismos. Personalmente creemos que fue un buen curso, en donde aprendimos lo suficiente para entender el desarrollo de la graficación y su aplicación en nuestros proyectos sin lugar a duda fue un excelente curso y nos dejó una gran enseñanza.


Conclusiones:


Este proyecto nos trajo grandes aprendizajes ya que desarrollamos un nueva habilidad en esta materia, como es la de aprender a manejar un nuevo software y poner de toda nuestra creatividad para desarrollarlo. Además de que fue muy interesante poder aplicar todo lo visto en la materia, con respecto a nuestro proyecto, ya que todo lo aprendido fue de gran utilidad.

Galería De Imágenes Del Proyecto.










PROPÓSITOS DE AÑO NUEVO.



Mis propósitos son: Ser una mejor persona con mis padres, mi hermano, con toda mi familia. Además de ser mejor en la escuela, ya que cada vez que avanzamos de semestre por una parte es emocionante por qué sabes que se acorta el tiempo, pero también motiva a destacar más en tu carrera y obtener buenas calificaciones.

También quiero llegar a ser mejor con las personas que rodean, ser una persona más tolerante, y menos enojona, saber qué momento es el correcto para decir algo o no, ya que a veces con nuestras palabras ocasionamos un mayor daño a las personas, ya que las ofendemos cuando estamos enojados, y después nos arrepentimos.


También mi propósito es ahorrar dinero, porque quiero viajar, además de que también si está en mis posibilidades comprarme un instrumento musical.


lunes, 25 de noviembre de 2013

CONCLUSIÓN.


En esta unidad aprendimos que el procesamiento de imágenes está dado por un conjunto de operaciones llevadas a cabo sobre las imágenes a fin de realizar mediciones cuantitativas para poder describirlas. Una imagen f(x,y) está dada por sus coordenadas espaciales y su brillo, y es representada matemáticamente en una matriz. Las imágenes al ser procesadas, se pueden obtener diversas aplicaciones como transformación, restauración, modelado, reconstrucción, entre otros.

También aprendimos diferentes técnicas de filtraje son transformaciones de la imagen píxel a píxel, que dependen de los niveles de gris de los píxeles vecinos en la imagen original.

Existen variadas técnicas de animación que logran que ésta sea más real, siendo diferentes o mejores una que otra.

 

5.3 ANIMACIÓN POR COMPUTADORA.


La animación es la simulación de un movimiento, creada por la muestra de una serie de imágenes o cuadros. Un ejemplo sencillo de esto son las caricaturas, que pertenecen a la animación tradicional. Hace algunos años se debía de dibujar cada cuadro y se unían para formar una imagen animada. Ahora, el uso de la computadora permite crear escenas mucho más reales.

La animación por computadora se puede definir como un formato de presentación de información digital en movimiento a través de una secuencia de imágenes o cuadros creadas o generadas por la computadora se utiliza principalmente en videojuegos y películas.


Características de la Animación 3D.



La animación por computadora permite crear escenar “realmente” tridimensionales, en una escena animada por computadora es posible cambiar el ángulo de la cámara y ver otra parte de la escena. Se pueden reutilizar partes de la animación por separado.

Una animación se ve más realista si variamos el peso y el tamaño de los objetos. Para cambiar el peso es necesario cambiar el tiempo que tarda en moverse. Mientras más pesado su masa es mayor y es necesario aplicar mayor fuerza para moverlo.

Es necesario pensar en la forma como se moverán los objetos. Cada movimiento se realiza por una razón. Es necesario conocer las formas en que actúan los cuerpos.

En la animación en tres dimensiones debe considerarse la forma en que se detiene los cuerpos. Al animar a un personaje es conveniente que si se va a detener, alguna parte de su cuerpo se siga moviendo ligeramente, como la cabeza o un brazo.

Hay tres fases que componen una acción: La anticipación de la acción, la acción en sí y la reacción a la acción.


Técnicas de animación.


· Animación en acetatos. Los acetatos de animación se colocan en capas, una encima de la otra, para producir un solo cuadro de animación. Se utiliza un acetato separado para la capa del fondo y otro para cada objeto que se mueve independientemente sobre el fondo.

· Animación basada en cuadros. Es el tipo más simple de animación. Quizá de niños tuvieron uno de esos libros que contenían una serie de dibujos al hojear rápidamente el libro, los dibujos de las páginas sucesivas aparentaban movimiento.

· Animación en Sprite. Esta animación es también llamada animación basada en repartos cada un sprite puede ser un objeto, es sobrepuesto y animado sobre un fondo estático. Esta animación es muy común en videojuegos.

· Key Framming: Se refiere a establecer posiciones en puntos específicos de tiempo en una animación y la parte intermedia la obtiene la computadora por medio de interpolación matemática.

· Rotoscopiado: Se obtienen la posición y el ángulo de los puntos clave de imágenes reales y se trata de hacer converger los modelos en computadora con ellos.

· Motion Control: Consiste en obtener posiciones clave de manera automática a partir de un actor real por medio de dispositivos que se conectan a su cuerpo.

· Wavelets: Significa “pequeñas ondulaciones”. Esta técnica permite que en una sola imagen se compriman una gran cantidad de datos para que al acercarse a ella, se vayan viendo los detalles.

· Técnicas de Pixar: El proceso que utiliza Pixar [12] para crear sus animaciones se compone de cuatro etapas principales: Desarrollo (crear el guion de la historia), preproducción (se direccionan los retos técnicos), producción (creación de la película) y post producción (pulir los últimos detalles).

 
Bibliografía:


http://graficacionporcomputadora.blogspot.mx/2013/05/53-animacion-por-computadora_8.html

http://graficacion-suirot18.blogspot.mx/2013/11/53-animacion-por-computadora.html http://lermalerma.blogspot.mx/2012/11/unidad-v-5.html

5.2 VISIÓN POR COMPUTADORA.


La visión por computadora es una rama de la inteligencia artificial que tiene por objetivo modelar matemáticamente los procesos de percepción visual en los seres vivos y generar programas que permitan simular estas capacidades visuales por computadora.

El proceso de visión por computadora puede subdividirse en sus áreas principales:

-Sensado. Es el proceso que nos lleva a la obtención de una imagen visual
- Preprocesamiento. Trata de las técnicas de reducción de ruido y enriquecimiento de detalles en la imagen
- Segmentación. Es el proceso que particiona una imagen en objetos de interés
- Descripción. Trata con el cómputo de características útiles para diferenciar un tipo de objeto de otro.
- Reconocimiento. Es el proceso que identifica esos objetos
- Interpretación. Asigna un significado a un conjunto de objetos reconocidos.


Esquema general del procesamiento de imágenes.





Esquema general de visión por computadora.





Ejemplo de procesamiento de imágenes. La tarea a realizar es mejorar la imagen de entrada, la cual es obscura. La imagen de salida es esencialmente la misma pero de mejor calidad o “más útil"




Se ilustra la diferencia entre procesamiento de imágenes y visión; la imagen muestra ciertas descripciones importantes, como los números, que previamente fueron detectados. La salida de este sistema de visión se complementa con un módulo de reconocimiento de patrones, es decir, “saber" qué letras y números contiene la placa.




Actualmente existen múltiples aplicaciones prácticas de la visión computacional, entre estas podemos mencionar las siguientes:

· Robótica móvil y vehículos autónomos.
· Manufactura.
· Interpretación de imágenes aéreas y de satélite.
· Análisis e interpretación de imágenes médicas.
· Análisis de imágenes para astrónoma.


Dispositivos para Visión.

Existen diferentes dispositivos para la captura de imágenes. Dichas imágenes son digitalizadas y almacenadas en la memoria de la computadora. Una vez en la computadora, o en ocasiones desde el mismo dispositivo de captura, la imagen puede ser ya procesada.

Para la adquisición de la imagen se requiere de un dispositivo físico que sea sensible a una determinada banda del espectro electromagnético. El dispositivo produce una señal eléctrica proporcional al nivel de energía detectado, la cual es posteriormente digitalizada. Entre los dispositivos de captura o sensores se encuentran:


· Cámaras fotográficas.
· Cámaras de televisión (vidicón o de estado solido - CCD).
· Digitalizadores (scanners).
· Sensores de rango (franjas de luz, laser).
· Sensores de ultrasonido (sonares).
· Rayos X.
· Imágenes de tomografía.
· Imágenes de resonancia magnética.


Bibliografía.

http://graficacionporcomputadora.blogspot.mx/2013/05/52-vision-por-computadora.html
http://lermalerma.blogspot.mx/2012/11/unidad-v-5.html

5.1 PROCESAMIENTO DE IMÁGENES.


Tiene como objetivo mejorar el aspecto de las imágenes y hacer más evidentes en ellas ciertos detalles que se desean hacer notar. La imagen puede haber sido generada de muchas maneras como fotográficamente o electrónicamente por medio de televisión. El procesamiento de las imágenes se puede hacer por medio de métodos ópticos, o bien por medio de métodos digitales, en una computadora.

Procesamiento óptico.

Los principios del procesamiento óptico de imágenes están bien establecidos desde el siglo pasado, cuando se desarrolló la teoría de la difracción de la luz. Sin embargo, su aplicación práctica data apenas del principio de la década de los sesenta, cuando se comenzó a disponer del rayo láser.

El procesamiento óptico se basa en el hecho de que la imagen de difracción de Fraunhofer de una transparencia colocada en el plano focal frontal de una lente es una distribución luminosa que representa la distribución de las frecuencias de Fourier que componen la imagen, a la que se le llama técnicamente transformada de Fourier.

Consideremos el arreglo óptico de la figura 42. En el plano focal frontal de la lente L1 se ha colocado la transparencia T, la cual está siendo iluminada por un haz de rayos paralelos provenientes de un láser de gas. Sobre el plano focal F1 de la lente L1 se forma una distribución luminosa que representa la transformada de Fourier de la transparencia. Si ahora se coloca otra lente L2 como se muestra en la misma figura, se puede formar una imagen de la transparencia en el plano focal F2 de esta lente. Si ahora se coloca cualquier objeto o diafragma sobre el plano F1, se pueden eliminar las porciones que se deseen de la transformada de Fourier de la transparencia, eliminando así de la imagen las frecuencias de Fourier deseadas.

Cada porción de la transformada de Fourier corresponde a una frecuencia espacial diferente sobre el objeto. Por lo tanto, mediante los diafragmas adecuados se pueden eliminar las frecuencias espaciales, llamadas también de Fourier, que se deseen quitar.


Procesamiento digital.




Al igual que en el caso del procesamiento óptico, los principios fundamentales del procesamiento digital de imágenes están establecidos hace muchos años, pero no se llevaban a cabo debido a la falta de computadoras. Con la aparición de las computadoras de alta capacidad y memoria, era natural que se comenzara a desarrollar este campo. Uno de los primeros lugares donde se empezó a realizar el procesamiento digital fue en el Jet Propulsion Laboratory, en 1959, con el propósito de mejorar las imágenes enviadas por los cohetes. Los resultados obtenidos en un tiempo relativamente corto fueron tan impresionantes que muy pronto se extendieron las aplicaciones del método a otros campos.




División de una imagen en pixeles.


El procesamiento digital de imágenes se efectúa dividiendo la imagen en un arreglo rectangular de elementos, como se muestra en la figura 43. Cada elemento de la imagen así dividida se conoce con el nombre de pixel. El siguiente paso es asignar un valor numérico a la luminosidad promedio de cada pixel. Así, los valores de la luminosidad de cada pixel, con sus coordenadas que indican su posición, definen completamente la imagen.

Todos estos números se almacenan en la memoria de una computadora.

El tercer paso es alterar los valores de la luminosidad de los pixeles mediante las operaciones o transformaciones matemáticas necesarias, a fin de hacer que resalten los detalles de la imagen que sean convenientes. El paso final es pasar la representación de estos pixeles a un monitor de televisión de alta definición, con el fin de mostrar la imagen procesada.


ACCIÓN DE GRACIAS.


Por qué se celebra:
En 1620 los peregrinos viajaron desde Inglaterra a las Américas en el barco Mayflower y desembarcaron en Plymouth. Escapaban de las constricciones de la iglesia de Inglaterra y también de la pobreza. Podrían considerarse los primeros inmigrantes de Norteamérica.

Los indios nativos de Massachusetts los recibieron amistosamente y compartieron con los peregrinos sus conocimientos sobre las cosechas en esta tierra y les enseñaron a cazar y a curar la carne de los animales de la zona.

Para celebrar que habían logrado sobrevivir un invierno muy duro y que tenían una abundante cosecha que les ayudaría a enfrentar el siguiente, los peregrinos organizaron una gran cena . Invitaron a los indios nativos para agradecer su ayuda. La primera celebración de acción de gracias duró varios días. Tanto los indios como los peregrinos compartieron alimentos, bebidas y diversión

Hoy día es una jornada de agradecimiento por las cosechas y por todo lo que uno tiene en la vida.

Cuándo se celebra:

El primer presidente de los EE.UU, George Washington declaró el primer día de acción de gracias el 19 de febrero de 1795. Más tarde, Abraham Lincoln escogió el 3 de octubre de 1863 como día de reflexión y agradecimiento.

El presidente Theodore Roosevelt cambió en 1941 el día de acción de gracias al cuarto jueves el mes de noviembre, que sigue siendo el día en que se celebra esta festividad.

Cómo se celebra Thanksgiving en Estados Unidos:

Es una celebración familiar en que las personas incluso viajan a otro estado para reunirse con su familia. Dado que en Estados Unidos son más independientes unos de otros que en las familias latinas, realizan el esfuerzo de reunirse al menos una vez al año.

Es una de las celebraciones más importantes en los Estados Unidos y marca el inicio de la temporada comercial de navidad. El día siguiente, viernes, se denomina Black Friday, en que hay rebajas en los comercios, en preparación para la época de regalos que se avecina. Ahora también hay rebajas en las tiendas virtuales en Internet ese día.


El menú de acción de gracias:

El menú tradicional es el pavo asado, puré de patatas, batatas caramelizadas y judías verdes o zanahorias glaseadas y panecillos de acompañamiento. El postre típico es el pastel de calabaza o de nueces pacanás.

En muchos restaurantes sirven un menú especial ese día, y también algunos supermercados ydelis venden el menú tradicional ya cocinado.

 
 
 
 
 


Bibliografía:

http://www.christiananswers.net/spanish/q-eden/ednkc002s.html

http://mamalatina.about.com/od/Tradiciones_familiares/p/Como-cuando-por-que-se-celebra-accion-de-gracias-Thanksgiving.htm

NAVIDAD Y AÑO NUEVO.


En México, la Navidad es una celebración muy importante. Las fiestas inician desde el 16 de Diciembre hasta el 6, con la tradición conocida como “las Posadas”. La Posada es una representación de lo que pasaron la Virgen y José para que les dieran posada y dar a luz al Niño Jesús. Así que un grupo de gente va caminando de casa en casa cantando algo como esto:


En el nombre del cielo,
os pido posada...

Hasta que llegan a la casa en que se va a celebrar la fiesta y los aceptan. Hay piñatas, comida, música, juegos etc.

24 y 25 de Diciembre.

El 24 de diciembre se llama la “Noche Buena”, y se celebra con toda la familia. Cuando dan las 12 campanadas, a la media noche, una persona arrulla al Niño Dios. Todos los familiares cantan villancicos y se prenden velas y luces de bengala. Toda familia hace una petición, ya sea en silencio o en voz alta y posteriormente se dan los abrazos y si hay regalos también. La cena del 24 puede ser: pavo relleno, bacalao, romeritos (platillo tradicional), caldo de camarón, pierna de cerdo, lomo adobado, ensalada de manzana, pasta, y algún postre. Tomamos ponche sin alcohol preparado con frutas de la temporada (caña, naranja, lima, tejocotes).

En cuanto al Año Nuevo, la celebración es muy similar a la de Noche Buena, solo que a las 00:00 hrs se hace un brindis y se comen 12 uvas, que representan cada uno de los meses del año que llega, con cada uva pedimos un deseo. La cena es similar a la de la Noche Buena y Navidad

El 5 de enero todos los niños escriben una carta a los Reyes Magos con los juguetes que desean recibir, algunos la mandan por globo al cielo y otros lo dejan dentro de un zapato a lado del árbol de navidad para que el 6 en la mañana encuentren sus regalos. El mismo 6 se corta la rosca de reyes que contiene muñequitos representando al niño Dios, el que saque el muñequito debe invitar a todos tamales y atole el día de la candelaria 2 de febrero.







 Bibliografía:

http://www.navidadlatina.com/mexico/

www.sunderlandschools.org/mfl-sunderland/.../ navidad en México

lunes, 18 de noviembre de 2013

DÍA DE LA REVOLUCIÓN MEXICANA (20 DE NOVIEMBRE).

La Revolución mexicana fue la primera revolución social y política del siglo XX, que inició en 1910 y terminó oficialmente en 1917 con la promulgación de la Constitución de 1917, si bien hubo conflictos intestinos y rebeliones armadas hasta la década de los treinta. El movimiento armado inició como una rebelión en contra de la dictadura de Porfirio Díaz, quien se mantuvo bajo una dictadura por 39 años.

En 1910, Porfirio Díaz se reeligió por sétima vez, después de encarcelar al candidato opositor Francisco Madero. Pero éste, al salir de prisión, hizo un llamado a la rebelión nacional y fue seguido por líderes populares como Pancho Villa y Emiliano Zapata. Al verse acorralado, Porfirio Díaz renunció el 25 de mayo de 1911, y huyó a Europa.

Victorioso, Madero restauró la Constitución de 1857, implantó el sufragio popular y prohibió la reelección. Pero las masas campesinas clamaban por reformas económicas, y el jefe guerrillero del sur Emiliano Zapata propuso el Plan de Ayala, para distribuir tierras entre los trabajadores. Lo apoyó Pancho Villa desde el norte del país. Mientras tanto los sectores conservadores (hacendados, la Iglesia) apoyaron al ministro Victoriano Huerta, quien traicionó a Madero y lo mandó asesinar en 1913.

Después de dos años de caos político y social, a fines de 1915 tomó el poder Venustiano Carranza, quien en 1917 promulgó la Constitución de Querétaro, donde se implantaban importantes reformas como: la jornada laboral de 8 horas, la indemnización por accidentes de trabajo, la libertad de creencias, la reforma agraria y la nacionalización del petróleo. En 1919, fue asesinado Emiliano Zapata.

En 1920, Venustiano Carranza fue asesinado por los partidarios de Álvaro Obregón, quien poco después tomó el poder. En 1923, los terratenientes asesinaron a Pancho Villa. Para muchos la muerte de Carranza y Villa marcan el fin de la Revolución Mexicana. Sin embargo, los conatos de violencia continuaron hasta que en 1934 llegó al gobierno don Lázaro Cárdenas, e hizo realidad la reforma agraria y la expropiación de los yacimientos petroleros.




Bibliografía:

http://mexablog.com/2009/11/20/20-de-noviembre-de-1910-inicio-de-la-revolucion-mexicana/#ixzz2l2zxJLSD

http://www.sanmiguelguide.com/revolucion-mexicana.htm

http://www.resumendehistoria.com/2009/10/la-revolucion-mexicana-resumen.html
 

domingo, 10 de noviembre de 2013

PROGRAMA 3D.



Para la visualización de un objeto 3D, se requieren 3 pasos:


En primer lugar se necesita una base de datos con las coordenadas (x,y,z) de los vértices y ademas los polígonos que forman el objeto.
En segundo lugar el objeto primero se rota y luego se traslada hasta la localización adecuada, con lo que se obtienen unas nuevas coordenadas (x,y,z) para los vértices.
Finalmente, se eliminan los polígonos que no son visibles por el observador, se aplica la perspectiva y se dibuja el objeto en la pantalla.

Base de Datos del Objeto 3D

Mi objeto esta compuesto por polígonos de tres lados, y cada poligono tiene 3 vértices cuyas coordenadas son (x,y,z).


Número máximo de vértices que puede tener el objeto

#define NUM_VERTICES

Cantidad máxima de polígonos que tiene el objeto


#define NUM_FACES


Definición de un vértice

typedef struct VTX


{
double x, y, z;
};

Definición de un polígono
typedef struct TRI
{
int a, b, c;
};


Estructura para el ordenamiento qsort, donde para cada polígono

almaceno la cordenada z y el indice del polígono
d=coordenada z del poligono, index=indice del polígono
typedef struct LSTR
{
int d;
int index;
};

Tabla que contiene los vértices originales
VTX points[NUM_VERTICES];
Tabla con los vértices transformados
VTX outpoints[NUM_VERTICES];
Tabla que contiene los polígonos
TRI faces[NUM_FACES];
Tabla de polígonos para aplicar el ordenamiento qsort
LSTRI ListFaces[NUM_FACES];
Número de vértices, y polígonos del objeto
int vertices, poligonos;

Vértices del objeto

V0 = points[0].x, points[0].y, points[0].z
V1 = points[1].x, points[1].y, points[1].z
V7 = points[7].x, points[7].y, points[7].z

Polígonos del objeto
faces[0].a = 0 faces[0].b = 2 faces[0].c = 1
faces[1].a = 2 faces[1].b = 3 faces[1].c = 1
faces[5].a = 6 faces[5].b = 7 faces[5].c = 5

Matrices de Transformación 3D
Sistema de Coordenadas


El sistema de coordenadas tridimensional utilizado es el llamado de la mano izquierda

Rotación en torno al eje X



Código en C

void matriz_rotacion_x(MATRIZ *m, double angulo)
{
double tmpsin, tmpcos;
tmpsin=sin(angulo);
tmpcos=cos(angulo);
*m = matriz_identidad;
m->v[1][1] = tmpcos;
m->v[1][2] = tmpsin;
m->v[2][1] = -tmpsin;
m->v[2][2] = tmpcos;
}

Ejemplo: matriz_rotacion_x(&Rx, 0.7)
Esto crea la matriz de rotación alrededor del eje X, donde Rx es una matriz 4x4 y 0.7 es el angulo de rotación, en radianes.

Rotación en torno al eje Y


Código en C.
void matriz_rotacion_y(MATRIZ *m, double angulo)
{
double tmpsin, tmpcos;
tmpsin=sin(angulo);
tmpcos=cos(angulo);
*m = matriz_identidad;
m->v[0][0] = tmpcos;
m->v[0][2] = -tmpsin;
m->v[2][0] = tmpsin;
m->v[2][2] = tmpcos;
}

Rotación en torno al eje Z


Código en C
void matriz_rotacion_z(MATRIZ *m, double angulo)
{
double tmpsin, tmpcos;
tmpsin=sin(angulo);
tmpcos=cos(angulo);
*m = matriz_identidad;
m->v[0][0] = tmpcos;
m->v[0][1] = tmpsin;
m->v[1][0] = -tmpsin;
m->v[1][1] = tmpcos;
}


Ejemplo : matriz_rotacion_z(&Rz, 0.7)
donde Rz es la matriz de 4x4, y 0.7 es el angulo de rotación en torno al eje Z.


Traslación


Código en C

void matriz_traslacion(MATRIZ *m, double Tx, double Ty, double Tz)
{
*m = matriz_identidad;
m->v[3][0] = Tx;
m->v[3][1] = Ty;
m->v[3][2] = Tz;
}


ESTRUCTURA DE TODO EL PROGRAMA.

#include <graphics.h>
#include <stdlib.h>
#include <math.h>
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include "svga256.h"

#define NUM_VERTICES 512
#define NUM_FACES 1024

typedef struct MATRIZ
{
double v[4][4];
};

typedef struct VTX
{
double x, y, z;
};

typedef struct TRI
{
int a, b, c;
};

typedef struct LSTRI
{
int d;
int index;
};

VTX points[NUM_VERTICES];
VTX outpoints[NUM_VERTICES];
TRI faces[NUM_FACES];
LSTRI ListFaces[NUM_FACES];
int vertices, poligonos;
//posicion de la fuente de luz
double xlight=1.0, ylight=-1.0, zlight=1.0;
unsigned char paleta[256][3];

MATRIZ matriz_identidad = {
{
{ 1.0, 0.0, 0.0, 0.0},
{ 0.0, 1.0, 0.0, 0.0},
{ 0.0, 0.0, 1.0, 0.0},
{ 0.0, 0.0, 0.0, 1.0}
}
};

double persp_xoffset;
double persp_yoffset;
double D;

int huge deteccion()
{
int modo;

clrscr();
printf("Selecciona un modo de video...\n");
printf(" 0) 320x200x256 VGA\n");
printf(" 1) 640x400x256 SVGA\n");
printf(" 2) 640x480x256 SVGA\n");
printf(" 3) 800x600x256 SVGA\n");
printf(" 4) 1024x768x256 SVGA\n\n>");
scanf("%d", &modo);
return modo;
}

void aplicar_matriz(MATRIZ *m, double x, double y, double z, double *xout, double *yout, double *zout)
{
*xout = x*m->v[0][0] + y*m->v[1][0] + z*m->v[2][0] + 1.0*m->v[3][0];
*yout = x*m->v[0][1] + y*m->v[1][1] + z*m->v[2][1] + 1.0*m->v[3][1];
*zout = x*m->v[0][2] + y*m->v[1][2] + z*m->v[2][2] + 1.0*m->v[3][2];
}

void matriz_multiplicacion(MATRIZ *m1, MATRIZ *m2, MATRIZ *out)
{
int i, j, k;

for (i=0; i<4; i++) {
for (j=0; j<4; j++) {
out->v[i][j] = 0.0;
for (k=0; k<4; k++)
out->v[i][j] = out->v[i][j] + m1->v[i][k]*m2->v[k][j];
}
}
}

void matriz_traslacion(MATRIZ *m, double Tx, double Ty, double Tz)
{
*m = matriz_identidad;
m->v[3][0] = Tx;
m->v[3][1] = Ty;
m->v[3][2] = Tz;
}

void matriz_escalamiento(MATRIZ *m, double Ex, double Ey, double Ez)
{
*m = matriz_identidad;
m->v[0][0] = Ex;
m->v[1][1] = Ey;
m->v[2][2] = Ez;
}

void matriz_rotacion_x(MATRIZ *m, double angulo)
{
double tmpsin, tmpcos;

tmpsin=sin(angulo);
tmpcos=cos(angulo);
*m = matriz_identidad;
m->v[1][1] = tmpcos;
m->v[1][2] = tmpsin;
m->v[2][1] = -tmpsin;
m->v[2][2] = tmpcos;
}

void matriz_rotacion_y(MATRIZ *m, double angulo)
{
double tmpsin, tmpcos;

tmpsin=sin(angulo);
tmpcos=cos(angulo);
*m = matriz_identidad;
m->v[0][0] = tmpcos;
m->v[0][2] = -tmpsin;
m->v[2][0] = tmpsin;
m->v[2][2] = tmpcos;
}

void matriz_rotacion_z(MATRIZ *m, double angulo)
{
double tmpsin, tmpcos;

tmpsin=sin(angulo);
tmpcos=cos(angulo);
*m = matriz_identidad;
m->v[0][0] = tmpcos;
m->v[0][1] = tmpsin;
m->v[1][0] = -tmpsin;
m->v[1][1] = tmpcos;
}

void persp_projeccion(double x, double y, double z, double *xout, double *yout)
{
double z1 = 1.0 / z;
*xout = ((x * z1) * D) + persp_xoffset;
*yout = ((y * z1) * D) + persp_yoffset;
}

void set_projeccion_viewport(int w, int h)
{
D = 800;
persp_xoffset = w/2;
persp_yoffset = h/2;
}

void ver_matriz(MATRIZ *m)
{
printf("%lf %lf %lf %lf\n", m->v[0][0], m->v[0][1], m->v[0][2], m->v[0][3]);
printf("%lf %lf %lf %lf\n", m->v[1][0], m->v[1][1], m->v[1][2], m->v[1][3]);
printf("%lf %lf %lf %lf\n", m->v[2][0], m->v[2][1], m->v[2][2], m->v[2][3]);
printf("%lf %lf %lf %lf\n", m->v[3][0], m->v[3][1], m->v[3][2], m->v[3][3]);
}

double producto_escalar(double x1, double y1, double z1, double x2, double y2, double z2)
{
return ((x1 * x2) + (y1 * y2) + (z1 * z2));
}

void producto_vectorial(VTX v1, VTX v2, VTX *out)
{
out->x = (v1.y * v2.z) - (v1.z * v2.y);
out->y = (v1.z * v2.x) - (v1.x * v2.z);
out->z = (v1.x * v2.y) - (v1.y * v2.x);
}

double modulo_vector(double x, double y, double z)
{
return sqrt(x*x + y*y + z*z);
}

void vector_normalizado(double *x, double *y, double *z)
{
double length = 1.0 / modulo_vector(*x, *y, *z);

*x *= length;
*y *= length;
*z *= length;
}

//Esta funcion permite conocer si un poligono esta de cara
//o de espaldas al observador, segun devuelva un valor mayor
//o menor que cero
double Hidden(VTX v1, VTX v2, VTX v3)
{
VTX u, v;
VTX out;
double xout, yout, zout;
double temp;

u.x = v2.x - v1.x;
u.y = v2.y - v1.y;
u.z = v2.z - v1.z;
v.x = v3.x - v1.x;
v.y = v3.y - v1.y;
v.z = v3.z - v1.z;
producto_vectorial(u, v, &out);
temp = producto_escalar(out.x, out.y, out.z, 0.0, 0.0, -1.0);
return temp;
}

//funcion usada para calcular el nivel de intensidad de la
//luz que recibe un poligono
int Light(VTX v1, VTX v2, VTX v3)
{
VTX u, v, out;
double temp;

u.x = v2.x - v1.x;
u.y = v2.y - v1.y;
u.z = v2.z - v1.z;
v.x = v3.x - v1.x;
v.y = v3.y - v1.y;
v.z = v3.z - v1.z;
//out es el vector normal al poligono
producto_vectorial(u, v, &out);
vector_normalizado(&out.x, &out.y, &out.z);
vector_normalizado(&xlight, &ylight, &zlight);
//El resultado de todas estas operaciones dar un valor comprendido
//entre 0.0 (m¡nima luz) y 1.0f (m xima luz)
temp = producto_escalar(out.x, out.y, out.z, xlight, ylight, zlight);
temp = 256.0*temp;
if (temp<0.0)
temp=0.0;
else
if (temp>255.0)
temp=255.0;
return (int) (temp);
}

//me dibuja un poligono solido, el color lo determino
//de acuerdo al nivel de luz que recibe.
void DibujarPoligono(int num)
{
int A, B, C;
int poly[6];
int i, color;

i=ListFaces[num].index;
A=faces[i].a;
B=faces[i].b;
C=faces[i].c;
//verifico si el poligono es visible o no
if (Hidden(outpoints[A], outpoints[B], outpoints[C])<0.0)
{
//se llama a la funci¢n que calcula la luz de un pol¡gono
color = Light(outpoints[A], outpoints[B], outpoints[C]);
poly[0]=(int) outpoints[A].x;
poly[1]=(int) outpoints[A].y;
poly[2]=(int) outpoints[B].x;
poly[3]=(int) outpoints[B].y;
poly[4]=(int) outpoints[C].x;
poly[5]=(int) outpoints[C].y;
setfillstyle(SOLID_FILL, color);
setcolor(color);
fillpoly(3, poly);
}
}

int comparar(const void * e1, const void * e2)
{
int d1, d2;

LSTRI *q1 = (LSTRI *)e1;
LSTRI *q2 = (LSTRI *)e2;

d1=q1->d;
d2=q2->d;
return (d2-d1);
}

void setvgapalette256(DacPalette256 *PalBuf)
{
struct REGPACK reg;

reg.r_ax = 0x1012;
reg.r_bx = 0;
reg.r_cx = 256;
reg.r_es = FP_SEG(PalBuf);
reg.r_dx = FP_OFF(PalBuf);
intr(0x10,®);
}

void LeerObjeto(char *nombre)
{
int i;

FILE *in = fopen(nombre, "r");
if (!in)
return;
fscanf(in, "%d\n", &vertices);
//printf("%d\n", vertices);
for (i = 0; i<vertices; i++)
{
fscanf(in, "%lf %lf %lf\n", &points[i].x, &points[i].y, &points[i].z);
//printf("%lf %lf %lf\n", points[i].x, points[i].y, points[i].z);
};
fscanf(in, "%d\n", &poligonos);
//printf("%d\n", poligonos);
for (i = 0; i<poligonos; i++)
{
fscanf(in, "%d %d %d\n", &faces[i].a, &faces[i].b, &faces[i].c);
//printf("%d %d %d\n", faces[i].a, faces[i].b, faces[i].c);
}
//printf("Presionar una tecla para continuar...");
//getch();
fclose(in);
}

int main(void)
{
MATRIZ Rx, Ry, Rz, Rot;
MATRIZ Tr, Mat;
MATRIZ temp;
int i;


//Carga el modelo en memoria
LeerObjeto("toro.dat");

//Inicializa el modo grafico
int driver = DETECT, modo = DETECT;
installuserdriver("Svga256", deteccion);
initgraph(&driver, &modo, "");

for (i=0; i<256; i++)
{
paleta[i][0]=i/4;
paleta[i][1]=i/4;
paleta[i][2]=i/4;
}

//me cambia la paleta de colores a una escala de 64 tonos de grises
setvgapalette256(&paleta);

for (i=0; i<256; i++)
{
setcolor(i);
line(i,0,i,20);
};

set_projeccion_viewport(getmaxx(), getmaxy());

//Inicializa las matrices de rotacion y
//traslacion.
matriz_rotacion_x(&Rx, -0.785);
matriz_rotacion_y(&Ry, 0.523);
matriz_rotacion_z(&Rz, 0.0);
matriz_traslacion(&Tr, 0.0, 0.0, -350.0);
//multiplica las matrices
//Mat=Rx*Ry*Rz*Tr (matriz de transformacion)
matriz_multiplicacion(&Rx, &Ry, &temp);
matriz_multiplicacion(&temp, &Rz, &Rot);
matriz_multiplicacion(&Rot, &Tr, &Mat);
//aplica la matriz de transformacion a cada uno
//de los vertices del modelo.
for (i=0; i<vertices; i++)
{
aplicar_matriz(&Mat, points[i].x, points[i].y, points[i].z,
&outpoints[i].x, &outpoints[i].y, &outpoints[i].z);
persp_projeccion(outpoints[i].x, outpoints[i].y, outpoints[i].z,
&outpoints[i].x, &outpoints[i].y);
};
//construyo una tabla con las coordenadas z, de cada uno
//de los poligonos.
for (i=0; i<poligonos; i++)
{
ListFaces[i].d = (int) fabs(outpoints[faces[i].a].z + outpoints[faces[i].b].z + outpoints[faces[i].c].z);
ListFaces[i].index=i;
}
//ordeno los poligonos de acuerdo a z.
qsort(ListFaces, poligonos, sizeof(ListFaces[0]), comparar);

//dibujo los poligonos
for (i=0; i<poligonos; i++)
DibujarPoligono(i);

getch();
closegraph();
return 0;
}





CONCLUSIÓN.

Gracias a las diferentes técnicas que vimos con respecto a los polígonos nosotros podemos lograr a través de estos que nuestros gráficos adquieran un mayor efecto de realismo. Y vemos que la iluminación y sombreado toman como características principales de la visibilidad, pero por otra parte hay otras características que influyen como el acabado del objeto, la transmisión de luz. Distintas combinaciones de estos factores pueden dar lugar a una infinita variedad de distintos enfoques, que harán que nuestros objetos se vean mejor.

2 DE NOVIEMBRE.


La Conmemoración de los Fieles Difuntos, popularmente llamada Día de Muertos o Día de Difuntos, es una celebración que tiene lugar el día  2 de noviembre, cuyo objetivo es orar por aquellos fieles que han acabado su vida terrenal y, especialmente, por aquellos que se encuentran aún en estado de purificación en el purgatorio.

En México más que una festividad Cristiana es una celebración donde se mezclan tanto la cultura prehispánica como la religión católica, donde el pueblo Mexicano logró mantener sus antiguas tradiciones vivas.

Los mexicanos somos una cultura que se diferencia de las demás porque transformamos a la muerte en algo familiar y cotidiano. En la celebración del Día de Muertos jugamos con la muerte, se la hacen corridos y se le demuestra un profundo respeto.

Los días 1 y 2 de noviembre, la gran mayoría de los habitantes del país realizan altares a sus muertos, comparten con ellos alimentos, adornan las tumbas, queman copal, entre muchas otras cosas.

Antiguamente se creía que los muertos necesitaban comida para llegar a su destino final, por lo que al morir se dejaba junto a ellos alimentos, agua, ofrendas y diversos objetos.

Esta tradición se mezcló y adaptó al calendario cristiano en los días 1 y 2 de noviembre.

El 1 de noviembre es Todos los Santos dedicado a los niños difuntos y el día 2 a los difuntos mayores. Se cree que en estos días los difuntos regresan a visitar a sus seres queridos.

Para el día 1º de noviembre se ponen ofrendas y altares a los “angelitos”, o muertos chiquitos que han dejado el mundo de los vivos.

 
Conclusión:

Hoy, al igual que en tiempos prehispánicos, se lleva a cabo esta celebración de manera festiva, es muy tradicional porque toda la gente lo hace para un ser querido que haya perdido, así le pones un altar y lo recuerdas de una manera muy bonita.

 



Bibliografía.



http://www.presidencia.gob.mx/elfuturodemexico/sabes-que-se-celebra-el-1-y-2-de-noviembre/

http://es.wikipedia.org/wiki/Conmemoraci%C3%B3n_de_los_Fieles_Difuntos

http://www.sanmiguelguide.com/dia-de-muertos.htm

 


TÉCNICAS DE SOMBREADO.

Sombreado constante.
 
Aplica una sola vez un modelo de iluminación para todo el polígono. Está simplificación sirve si: 
 
  •  La fuente luminosa está en el infinito, por tanto nl es constante.
  • El observador está en el infinito, por tanto nv es constante en toda la cara del polígono.
  • El polígono representa la superficie real que se modela y no es una aproximación a una superficie curva.
  • Si las suposiciones son incorrectas, entonces hay un método para determinar l y v.
 
Sombreado interpolado.
 
En lugar de evaluar la ecuación de iluminación para cada pixel, esta se interpola linealmente sobre un triángulo a partir de los valores determinados para sus vértices. Se puede generalizar para otro tipo de polígonos.
 
A su vez, en lugar de realizar la interpolación para cada píxel, se puede hallar una ecuación de diferencia.
 
Esta interpolación no evita la apariencia facetada. Según el objeto a modelar, esto es positivo o no.
 
Sombreado de malla poligonal.
 
Una superficie curva se puede aproximar a otra facetada (malla poligonal) no se logran buenos resultados en la interpolación, aunque se trabaje con una densidad alta de polígonos.
 
 
 
 
Sombreado de malla poligonal.
 
Los problemas en la visualización de una superficie curva a través de una aproximación facetada, tienen su origen en el efecto de banda de mach.
 
 
 
 
 
Esquema de las intensidades reales y las percibidas.
 
  
 
 
Sombreado de Gouraud.
 
Este esquema de interpolación de intensidad, creado por gouraud, elimina discontinuidades en intensidades entre planos adyacentes de la representación de una superficie variando en forma lineal la intensidad sobre cada plano de manera que lo valores de la intensidad concuerden en las fronteras del plano. en este método los valores de la intensidad a lo largo de cada línea de rastreo que atraviesan una superficie se interpolan a partir de las intensidades en los puntos de intersección de con la superficie.
 
 
 
 
Sombreado de Phong.
 
En lugar de interpolar la intensidad del vértice (gouraud), se interpola y normaliza la normal a los vértices.
 
Si se utiliza sombreado de phong con n alto, la diferencia entre phong y gouraud puede llegar a ser notable. Normalizar un vector es costoso, y aplicar un modelo de iluminación a cada pixel también puede serlo.
 
 
 
 
 
 
 
 
 
 
 
 
 
Algoritmo de trazo de rayas.
 
Puesto que podría generarse un número infinito de puntos de intensidad sobre las diversas superficies de una escena, un buen método para determinar las intensidades especulares en posiciones visibles de la superficie consiste en trazar rayas hacia atrás desde la posición de visión hasta la fuente de luz. Comenzando desde la posición de visión, la raya que atraviesa cada pixel en el plano de visión se traza hacia atrás a una superficie de la escena tridimensional. Esta técnica, conocida como trazo de rayas, se ilustra en la siguiente figura.
 
 
 
 
 
Cuando se encuentran objetos transparentes en el proceso del trazo de rayas, las contribuciones de intensidad de la reflexión especular se toman en cuenta. En una superficie transparente, la raya se divide en los dos componentes que se muestran en la siguiente figura. Cada raya se traza después en forma individual hacia su fuente.
 
 
 
 
Después que se ha procesado una raya para determinar todas las contribuciones de intensidad especular, se fija la intensidad del pixel correspondiente. La figura siguiente muestra dos vistas de una escena generada con técnicas de trazo de rayas.
 
 
 
 
Superficies fractales.
 
Para determinar niveles de intensidad para los diversos puntos de la superficie de un objeto fractal se necesita algún método para determinar las normales a la superficie. Un método para realizar esto consiste en representar a un fractal como un número de planos pequeños con un conjunto de normales a la superficie para cada plano.
 
Fronteras de superficies con anti seudónimos.
 
Las líneas y las aristas de polígonos pueden aliarse con técnicas de anti seudónimos que ajustan posiciones de pixeles o bien fija las intensidades de los pixeles de acuerdo con el porcentaje de área-pixel cubierta en cada punto. Pueden aplicarse métodos de anti seudónimos semejantes para alisar las fronteras de una escena que contiene un conjunto de superficies.
 
 
Bibliografía.
 
 
 
 
 
 

MODELOS BÁSICOS DE ILUMINACIÓN.


Modelo de iluminación simple.

Sólo influyen la superficie en cuestión, las luces y la posición del observador (cálculos simples).





Modelos de iluminación complejos.

Las sombras, las interreflexiones y la difusión de la luz en otros medios se calculan por otros algoritmos (implican cálculos complejos).









Modelo de iluminación simple.
Pero igualmente, con un modelo de iluminación simple + trucos se puede dar ilusión de realismo.
 
Reflexión difusa.
Un reflector difuso perfecto esparce la luz que refleja de manera igual en todas las direcciones, viéndose igual para todos los observadores. Sin embargo, la cantidad de luz reflejada depende del material, dado que parte de la luz es absorbida, y de la posición de la fuente de luz relativa a la superficie. Reflexiones difusas son caracterizadas por superficies rugosas, como se ve en la siguiente figura (corte trasversal):
Se considera una superficie plana difusa iluminada por el sol, como se muestra en la siguiente figura:
 
La superficie se vuelve más brillante al mediodía, y menos durante la madrugada y la puesta, dado que, según la ley de Lambert, solo se ve el componente vertical de la luz entrante. 
Reflexión de Lambert:
Las superficies que muestran reflexión difusa, aparecen igual de brillantes desde cualquier ángulo de vista ya que cualquier punto de estas superficies refleja la luz con igual intensidad en todas direcciones. Es decir, un punto de la superficie del objeto parece igual de brillante desde cualquier lugar desde el que se observe y al variar la posición de la vista, esta intensidad sigue sin variar.
 
En las imágenes inferiores, el brillo del polígono señalado con una flecha roja es el mismo, a pesar de que el ángulo de vista es distinto.
 
 
Esto se explica debido a que en este modelo de iluminación, para una superficie dada, el brillo de la misma depende únicamente del ángulo (θ) entre la dirección de la luz (L) y el vector normal a la superficie (N) y no depende para nada del ángulo de vista.
 
Matemáticamente, hay dos factores que hacen que esto ocurra:
 
  • Por un lado, esto es así porque, en un principio, un rayo que intercepta una superficie cubre un área que es inversamente proporcional al coseno del ángulo entre este rayo y el vector normal a la superficie. Por ejemplo, si consideramos que el rayo posee una sección transversal diferencial dA infinitamente pequeña, entonces la superficie que intercepta el rayo equivaldría a dA / cos θ. Entonces obtenemos que para un rayo cualquiera, la cantidad de energía que incide en dA es proporcional al cos θ.
  • Por otro, debemos conocer una propiedad de este modelo de sombreado, por el cual consideramos que la cantidad de luz reflejada hacia el observador, es directamente proporcional al coseno entre observador y la normal de la superficie que refleja la luz. Pero como hemos visto en el punto 1, la cantidad de superficie visible es inversamente proporcional a este coseno, por lo que estos dos factores se anulan.
 
 
Reflexión especular.
 
La denominada reflexión especular se puede contemplar en cualquier tipo de superficie brillante. Si se emplea solo reflexiones ambiente y difusas, las imágenes serán sombreadas y aparecerán tridimensionales, pero todas las superficies se verán sin vida. Lo que hace falta son la reflexión de secciones más brillantes en los objetos. Esto ocasiona un color diferente del color del ambiente reflejado y luz difusa. Una esfera roja, bajo luz blanca, tendrá un resplandecer blanco que es la reflexión de parte de la luz de la fuente en la dirección del observador.
 
Mientras que una superficie difusa es rugosa, una superficie especular es suave. Mientras mas lisa se la superficie, mas se parece a un espejo, como se ve en la siguiente figura.
 
Según la superficie se hace mas lisa, la luz reflejada se concentra en un rango mas pequeño de ángulos, centrado alrededor del ángulo de un reflector perfecto: un espejo o una superficie especular perfecta. Modelar superficies especulares realísticas puede ser complejo, ya que el patrón por el cual se esparce no es simétrico, dependiendo de el largo de onda de la luz incidente y cambia con el ángulo de reflexión
 
Modelo de iluminación de Phong.
 
Phong Bui-Tuong desarrollo un modelo de iluminación muy popular para reflectores no perfectos, como la manzana. Asume que, como se observó antes, el máximo reflejo especular ocurre cuando α es 0, disminuyendo a medida que aumenta α. Esta caída es aproximada mediante la siguiente función:
 
cosn α
 
n = exponente de reflexión especular. Constante propia del materia del objeto. Los valores de n suelen variar entre 1 y varios cientos, dependiendo del material que se quiere simular. Para obtener un reflector perfecto, n debería tender a infinito.
 
Al igual que en el modelo de reflexión de Lambert, tomamos valores negativos de este coseno como 0.
 
El modelo de iluminación de Phong está basado en otros trabajos anteriores, sin embargo, este fue el primero en construir un modelo de reflexión especular para observador y luces que se encuentran en posiciones arbitrarias del universo.
 
La cantidad de luz incidente reflejada de forma especular depende del ángulo de incidencia θ.
 
 
Si W(θ) es la fracción de luz especular reflejada, el modelo de Phong es:
 
Iλ = Iaλ · ka · Odλ + ƒatt · Ipλ · [kd · Odλ · cos θ + W(θ) · cosn α]
 
Aquí se muestran diferentes valores de cosn α usados habitualmente en el modelo de iluminación de Phong:
 
Si la dirección del vector reflejo R, y la dirección del punto de vista están normalizados, entonces cos α = R · V. Además, W(θ) se transforma en una constante ks, que es el coeficiente de reflexión especular del material, con un valor acotado entre 0 y 1. El valor de ks, se obtiene experimentalmente para obtener resultados estéticamente correctos. Con esto, la función puede ser reescrita de la siguiente forma:
 
Iλ = Iaλ · ka · Odλ + ƒatt · Ipλ · [kd · Odλ · (N · L)] + ks · (R · V)n]
 
Se puede ver que el color de la componente especular en el modelo de Phong no depende de ninguna propiedad del material, por este modelo en concreto obtiene muy buenos resultados al simular superficies plásticas, las cuales poseen la misma propiedad.
Pero como se mostró anteriormente, a la reflexión especular le afectan las propiedades del material del objeto y, en general, el reflejo especular tendrá un color diferente al reflejo difuso cuando la superficie está compuesta de varios materiales. Se puede obtener este efecto con esta nueva variación de la ecuación anterior:
 
Iλ = Iaλ · ka · Odλ + ƒatt · Ipλ · [kd · Odλ · (N · L)] + ks · Osλ · (R · V)n]
 
Donde Osλ es el color especular del objeto.
 
Atenuación de la intensidad.
Si tenemos una escena formada por dos superficies paralelas de idéntico material que se solapan y que están iluminadas desde nuestro punto de vista, no podremos distinguir donde termina un plano y donde comienza el otro, como se ve en esta escena iluminada con una luz direccional.
 
 
Para obtener el resultado requerido, introducimos un factor de atenuación ƒatt de la siguiente forma en nuestra función de reflexión difusa: 
I = Ia · ka + ƒatt · Ip · kp · (N · L)
 
La explicación del uso de este factor ƒatt lo obtenemos del hecho físico de que la energía desde el origen de la fuente de luz cae como el inverso del cuadrado de dL, que es la distancia que viaja la luz desde el punto de luz hasta la superficie dada. En este caso:
 
ƒatt = 1 / dL2
 
Un ejemplo de este tipo de iluminación, es la misma escena de antes, iluminada con el mismo tipo de luz direccional, con la excepción de que ahora se emplea atenuación de la intensidad de la luz (con el parámetro ƒatt = 1 / dL2):
 
Sin embargo, en la práctica, esto no funciona demasiado bien. Si la fuente luz está demasiado lejos, 1 / dL2 no varía demasiado, y si la fuente de luz está demasiado cerca, 1 / dL2 varía muy rápido, dando como resultado sombras considerablemente diferentes para el mismo ángulo θ entre N y L. Un ejemplo de escena excesivamente oscura por una atenuación 1 / dL2 sería:
 
 
Así que, aunque este comportamiento es correcto para fuentes de luz puntuales, los objetos que vemos en la vida real no están iluminados por fuente de luz puntuales, ni usan modelos simplificados de iluminación.
 
Lo que se espera de este modelo es que aproxime algunos de los efectos de la atenuación atmosférica entre el observador y el objeto. Un compromiso que nos permite acercarnos a esta aproximación de forma más simple que la ley de atenuación del cuadrado de la distancia es:
 
ƒatt = min(1 / (c1 + c2 · dL + c3 · dL2), 1)
 
Donde c1, c2 y c3 son constantes definidas por el usuario asociadas con la fuente de luz. c1 evita que el denominador se vuelva demasiado pequeño cuando la luz esta cerca, y la expresión es ajustada a un valor máximo de 1 para asegurar que siempre se atenúa.
 
Bibliografía.