martes, 27 de noviembre de 2012
UNIDAD V
5.1 Procesamiento de imagenes
Tiene como objetivo mejorar el aspecto de las imagenes y hacer mas evidentes en ellas ciertos detalles que se desean hacer notar. La imagen puede haber sido generada de muchas maneras como fotograficamente o electronicamente por medio de television. El procesamiento de las imagenes se puede hacer por medio de metodos opticos, o bien por medio de metodos digitales, en una computadora.
PROCESO DE FILTRADO
Los principales objetivos son:
- Suavizar la imagen. reducir la cantidad de variaciones de intensidad entre pixeles vecinos.
- Eliminar ruido. Eliminar aquellos pixeles cuyo nivel de intensidad es muy diferente al de sus vecinos y cuyo origen puede estar tanto en el proceso de adquisicion de la imagen como en el de transmision.
- Realzar bordes. Destacar los bordes se localizan en una imagen.
- Detectar bordes. Detectar los pixeles donde se produce un cambio brusco en la funcion intensidad.
5.2 VISION POR COMPUTADORA
La vision por computadora es una rama de la inteligencia artificial que tiene por objetivo modelar matematicamente los procesos de percepcion visual en los seres vivos y generar programas que permitan simular estas capacidades visuales por computadora.
El proceso de vision por computadora puede subdividirse en sus areas principales:
- Sensado. Es el proceso que nos lleva a la obtencion de una imagen visual
- Preprocesamiento. Trata de las tecnicas de reduccion de ruido y enriquecimiento de detalles en la imagen
- Segmentacion. Es el proceso que particiona una imagen en objetos de interes
- Descripcion. Trata con el computo de caracteristicas utiles para diferenciar un tipo de objeto de otro.
- Reconocimiento. Es el proceso que identifica esos objetos
- Interpretacion. Asigna un significado a un conjunto de objetos reconocidos.
5.3 ANIMACION POR COMPUTADORA
La animacion es la simulacion de un movimiento, creada por la muestra de una serie de imagenes o cuadros. Un ejemplo sencillo de esto son las caricaturas, que pertenecen a la animacion tradicional. Hace algunos anos se debia de dibujar cada cuadro y se unian para formar una imagen animada. Ahora, el uso de la computadora permite crear escenas mucho mas reales.
La animacion por computadora se puede definir como un formato de presentacion de informacion digital en movimiento a traves de una secuencia de imagenes o cuadros creadas o generadas por la computadora se utiliza principalmente en videojuegos y peliculas.
Tecnicas de animacion:
- Animacion en acetatos. Los acetatos de animacion se colocan en capas, una encima de la otra, para producir un solo cuadro de animacion. Se utiliza un acetato separado para la capa del fondo y otro para cada objeto que se mueve independientemente sobre el fondo.
- Animacion basada en cuadros. Es el tipo mas simple de animacion. Quiza de nino tuvieron uno de esos libros que contenian una serie de dibujos al hojear rapidamente el libro, los dibujos de las paginas sucesivas aparentaban movimiento.
- Animacion en Sprite. Esta animacion es tambien llamada animacion basada en repartos cada un sprite puede ser un objeto, es sobrepuesto y animado sobre un fondo estatico. Esta animacion es muy comun en videojuegos.
ACTIVIDAD
Graficacion en medicina.
Uno de los precursores en el estudio cientifico y detallado del terreno de la medicina a traves de la imagen fue Andreas Vesalio. Pero vesalio y sus sucesores dibujaban a mano todos sus modelos, algo que desde una perspectiva moderna, es poco eficiente. No podrian haberse imaginado el desarrollo tan espectacular que iba a sufrir su campo tres siglos mas tarde.
La segunda gran revolucion fue el descubrimiento y desarrollo de los rayos X. El exito de esta tecnica viene de que una imagen obtenida en una CT consigue distinguir diferencias minimas de intensidad, hecho que permitio, por ejemplo, diferenciar a nivel cerebral, las sustancias gris y blanca.
La tercera gran revolucion fue La Resonancia Magnetica que permite desde el estudio del cerebro de enfermos de esquizofrenia hasta el de los ligamentos de los deportistas. La MR es un fenomeno fisico basado en las propiedades magneticas que poseen los nucleos atomicos.
La cuarta gran revolucion fue la ecografia, esta muy ligada a un instrumento belico, el sonar, desarrollado por cientificos en la SGM. Se trata de una tecnica no invasiva basada en la utilizacion de ultrasonidos para estudiar la estructura de los tejidos, diferenciando tejidos sanos de tejidos patologicos.
GRAFICACION EN EDUCACION
Se utilizan instrumentos a menudo como ayuda educativa, modelos de sistemas fisicos, financieros y economicos, los cuales se generan por computadora. Modelos de sistemas fisicos, sistemas fisiologicos, tendencias de poblacion o equipo, pueden ayudar a los estudiantes a comprender la operacion del sistema. En el caso de algunas aplicaciones de capacitacion, se disenan sistemas especiales, como los simuladores para sesiones de practica o capacitacion de capitanes de barco, pilotos de avion, operadores de equipo pesado y el personal de control de trafico aereo. Algunos simuladores no tiene pantallas de video, por ejemplo simulador de vuelo. No obstante, la mayor parte de los simuladores cuenta con pantallas graficas para la operacion visual.
GRAFICACION EN PUBLICIDAD
La mejor publicidad grafica siempre ha sido venerada y elevada a la categoria de arte. Propuestas creativas, fotografia, tecnologia aplicada a la imagen, etc. todos son ingredientes de una formula donde existe un componente especial. El mensaje.
Sin duda el elemento quizas mas importantes en toda pieza artistica y creativa y como no tambien de anuncios de la publicidad grafica donde el objetivo principal se fundamente en conseguir la forma mas eficaz de transmitirlo sin necesidad apenas de recurrir a las palabras.
GRAFICACION EN ENTRETENIMIENTO
Es muy comun utilizar metodos de graficos por computadora para producir peliculas, videos musicales y programas de television. En ocasiones, se despliegan solo imagenes graficas y otras veces, se combinan los objetos con los actores y escenas en vivo. Por ejemplo en una escena grafica para la pelicula Start Treck, se dibujan en forma de armazon el planeta y la nave espacial y se sombrean con metodos de presentacion para producir superficies solidas. Al igual que pueden aparecer personas en forma de armazon combinadas con actores y una escena en vivo. Los videos musicales aprovechan las graficas de muchas maneras, se pueden combinar objetos graficos con accion en vivo, o se pueden utilizar tecnicas de procesamiento de imagenes para producir una transformacion de una persona o un objeto en otro.
miércoles, 7 de noviembre de 2012
CRUCIGRAMA
1. Superficies DIFUSAS - se caracterizan por reflejar la luz en todas las direcciones. Paredes pintadas con mate.
2. La luz puede dejar una superficie mediante dos procesos fundamentales:
• Emisión PROPIA
• REFLEXION
3. Si la superficie es OPACA, reflexión y absorción significará de toda la luz que dé en la superficie
4. SPOTLIGHTS (Luces direccionales): se caracterizan por un rango delgado de ángulos por los cuales se emite luz
Se describe una fuente mediante una función de 5. INTENSIDAD o 8. LUMINANCIA de tres componentes.
6. Fuentes de PUNTO: emite luz de manera igual en todas las direcciones.
Luz 7. AMBIENTE: lograr un nivel de luz uniforme en el cuarto. Esta iluminación uniforme se llama
Superficies 10. ESPECULARES - se ven relumbrantes porque la mayoría de la luz reflejada ocurre en un rango de ángulos cercanos al ángulo de reflexión.
Luces 11. DISTANTES: 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.
Técnicas de Sombreado Clásicas y Avanzadas
Técnicas de sombreado clásicas y avanzadas
Clásicas: Iluminación local
Cálculos de iluminación por vértices: Es necesario que el
cálculo del color se lleve a cabo según las luces encendidas por cada vértice y
las propiedades de éste.
Posterior relleno de triángulos: Se llevan a cabo varias
fases de procesamiento por pixel. Se comprueba cada pixel es visible o no.
Se modifica el color que corresponde, de acuerdo a la
textura o transparencia existentes.
En la última fase, se asignan colores a cada pixel de
cada triángulo. Dichos colores deben calcularse por el método de Gouraud,
interpolando linealmente entre los colores de cada vértice del triángulo que se
está visualizando.
Renderizado en tiempo real: La renderización consiste en
generar imágenes a partir de un modelo, utilizando algún software de una
computadora. Se utiliza en la producción de imágenes en tres dimensiones para
video juegos, diseño computacional, efectos especiales del cine y la TV.
El renderizado en tiempo real es en donde todos los
movimientos y cambios de escena se calculan en ese mismo instante, debido a que
no son predecibles hasta haber tomado una decisión.
Realistas: Iluminación global
Trazado de rayos: Algoritmo para sintetizar imágenes en
3D. Se basa en el algoritmo de determinación de superficies visibles de Arthur
Appel denominado Ray Casting, el cual consiste en determinar las superficies
que son visibles en la escena que se quiere sintetizar trazando rayos desde la
cámara hasta la escena a través del
plano de la imagen.
Este algoritmo, extiende la idea de trazar rayos para
determinar las superficies visibles con un proceso de sombreado que tiene en
cuenta efectos globales de iluminación.
Radiosidad: Técnica que calcula el intercambio de luz
entre superficies difusas, lo cual se consigue subdividiendo el modelo en pequeñas
unidades que se denominan parches, los cuales a su vez, se subdividen en
unidades más pequeñas, elementos, los cuales serán la base de la distribución
de luz final.
Cálculos de iluminación por pixel: Tecnología ofrecida
por primera vez por NVIDIA Shading Rasterizer. Este tipo de iluminación libera
a los desarrolladores de restricciones y pone efectos sofisticados al alcance.
Antes de asignar un color por pixel, se realiza un cálculo de iluminación
mediante un ordenador para sombrear los pixeles basándose en alguna luz
presente en la escena.
Alto acabado: Se obtiene una intensidad que es aplicada
al conjunto de puntos del objeto, el cual representa una superficie plana del
objeto modelado y no de un objeto curvo.
Sombreado Constante o Plano
Un cálculo para todo el polígono:
El sombreado constante aplica un modelo de iluminación
sólo una vez y permite determinar un valor de Iλ , para un polígono.
En el sombreado Interpolado, la información de sombreado
se interpola linealmente sobre un triángulo, a partir del valor de sus
vértices.
Interpolación de Intensidades (Gouraud).
Este método calcula la intensidad de los pixeles a lo
largo de la línea de escaneo por interpolación. Elimina la discontinuidad de la
intensidad entre los polígonos que se presenta en el método de sombreado con
intensidad constante.
Se requiere hacer los siguientes cálculos por cada
polígono:
·
Determinar el vector unitario normal de los vértices, el cual es el
promedio de las normales de las caras que comparten el vértice.
· Calcular
la intensidad de cada vértice aplicando el modelo de iluminación.
·
Interpolar linealmente las intensidades sobre las aristas del polígono.
·
Interpolar las intensidades de los pixeles entre las aristas.
Interpolación de Normales (Phong).
Este método
interpola las normales para cada punto de la superficie. Consiste en:
·
Determinar el vector unitario de la normal de los vértices, el cual es
el promedio de las normales de las caras que comparten el vértice.
· Interpolar linealmente las normales sobre
las aristas del polígono.
·
Interpolar linealmente las normales de los pixeles entre las aristas.
· Aplicar
el modelo de iluminación a lo largo de cada línea de escaneo para calcular las
intensidades de cada pixel.
Ray-Tracing
Recortado de caras traseras
Buffer de profundidad: Mantiene valores de distancia para
cada pixel. Cada valor representa la distancia existente al pixel desde la
posición de la cámara y se escala para quedar dentro del volumen de trabajo
actual. Se utiliza para ejecutar la eliminación de caras ocultas y otros
efectos especiales.
Buffer de Stencil: Proporciona funciones para restringir
el dibujo en pantalla. Puede usarse para cerrar ciertas áreas de la pantalla. Una de las aplicaciones más
interesante es el sombreado.
Buffer de acumulación: proporciona soporte para muchos
efectos especiales como difuminado dinámico y profundidad de campo. Soporta
antiescalonado a pantalla completa y menos complejo que los otros buffers.
Fuentes de color: Es posible modelar fuentes de luz, para
muchas aplicaciones, en base a los
componentes RGB y puede usarse cada uno de los colores fuentes para obtener el
componente de color correspondiente.
Luz ambiente: Proviene de una fuente que ha sido disipada
por el entorno y no se puede determinar su dirección. Cuando una luz ambiente
golpea una superficie, se disipa en todas direcciones.
Spotlights (direccionales): Se caracterizan por un rango
de ángulos por los que se emite luz. Puede construirse un spotlight sencillo de
una fuente de punto limitando los ángulos de donde la luz fuente se puede ver.
Fuentes de luz distantes: Simula una luz situada a gran
distancia del objeto iluminado, Sus parámetros son:
· Acimut
que es donde se define el ángulo de la
dirección de la fuente de luz.
· Elevación
que define el ángulo en grados de la dirección de la fuente de luz por encima
del plano.
martes, 30 de octubre de 2012
Clásicas: Modelo de iluminación local
Son
aquellos en los que se considera que la intensidad de luz en un punto
de la superficie de un objeto se debe exclusivamente a las Fuentes
luminosas.
Renderizado en Tiempo Real
La
renderización es el proceso de generar una imagen desde un modelo, y
se suele aplicar en la computación gráfica, más comúnmente a la
infografía. En infografía este proceso se desarrolla con el fin de
imitar un espacio 3D formado por estructuras poligonales, comportamiento
de luces, texturas, materiales (agua, madera, metal, plástico, tela,
etcétera) y animación, simulando ambientes y estructuras físicas
verosímiles. Una de las partes más importantes de los programas
dedicados a la infografía son los motores de renderizado, los cuales
son capaces de realizar técnicas complejas como radiosidad, raytrace,
canal alfa, reflexión, refracción o iluminación global.
Cuando
se trabaja en un programa de diseño 3D asistido por ordenador,
normalmente no es posible visualizar en tiempo real el acabado final
deseado de una escena 3D compleja ya que esto requiere una potencia de
cálculo demasiado elevada, por lo que se opta por crear el entorno 3D
con una forma de visualización más simple y técnica, y luego generar el
lento proceso de renderización para conseguir los resultados finales
deseados. El tiempo de render depende en gran medida de los parámetros
establecidos en los materiales y luces, así como de la configuración del
programa de renderizado.
Realistas: Modelo de iluminación global
Son
aquellos en los que se considera que la intensidad de luz en un punto
de la superficie de un objeto se debe a las fuentes luminosas y al resto
de los elementos existentes en la escena.
Trazado de rayos
Consiste
en que –teniendo la posición y atributos físicos de cada uno de los
objetos a iluminar, así como la situación, intensidad y tipo de fuentes
de luz que iluminan los objetos, junto con la posición del observador y
la del plano de proyección de la imagen (la pantalla), y el modo de
iluminación o cálculo del color en un punto de la superficie de un
objeto- se traza un rayo desde la posición del observador a través de
cada uno de los píxeles del plano de proyección (una de las ventajas del
raytracing es que los rayos que se procesan son sólo los rayos que
parten del observador ), y por cada uno de estos rayos trazados se busca
si interseca con alguno de los objetos que se representan; si no se
encuentra ninguna intersección, para ese pixel, no se sigue el proceso y
se le hace corresponder, por defecto, un color de fondo. Si el rayo se
encontrara con un objeto, se analizan los atributos físicos que tiene
asignado el objeto y se resuelve según la modelización de la
iluminación, calculando su color en el punto del objeto donde interseca
el rayo.
Radiosidad
El
método de radiosidad, consiste en que las reflexiones de la luz sobre
los objetos se tratan como reflexiones difusas ideales de tal manera que
la modelización de los efectos ópticos, como la de los espejos, por
ejemplo, no se realiza. Este método hace aquello que no realiza el
trazado de rayos. Para este método, los materiales de los objetos tienen
superficies mate que no producen reflexiones espectaculares, por lo que
la parte de energía que les llega, y que no haya sido absorbida por la
superficie, se refleja por igual a lo largo de toda esta superficie del
objeto.
Cálculos de iluminación por pixel
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.
Sombreado Plano o Constante
Los tres vectores, l, n y v, pueden variar según se va entre puntos sobre una superficie.
• Para un polígono plano, n es constante.
• Si se asume un observador distante, v es constante sobre el polígono.
• Si la fuente de luz es distante, l es constante.
Si
los tres vectores son constantes, entonces el cálculo de sombreado se
lleva a cabo una sola vez para cada polígono, y se asignará la misma
sombra a cada punto en el polígono.
Sombreado plano mostrará diferencias de sombreado entre los polígonos.
Sombreado Gouraud
En
el sombreado Gouraud, se define la normal en un vértice como el
promedio normalizado de las normales de los polígonos que comparten el
vértice.
Desde
la perspectiva de OpenGL, el sombreado Gouraud es sencillo. Se necesita
solamente asignar correctamente las normales de vértices. Sin embargo,
existe un problema, encontrar las normales para promediar. Si el
programa es lineal, especificar una lista de vértices (y otras
propiedades), no se tiene la información necesaria de cuales polígonos
comparten un vértice. Lo que se requiere es una estructura de datos para
representar un "mesh". Atravesar esta estructura de datos puede generar
los vértices con las normales promediadas. Tal estructura de datos debe
contener, de manera mínima, polígonos, vértices, normales, y
propiedades de los materiales.
Sombreado Phong
Phong
propuso que, en lugar de interpolar intensidades de los vértices, se
interpole normales a lo largo del polígono. Para un polígono que
comparte lados y vértices con otros polígonos.
Se
puede computar normales en los vértices interpolando sobre las normales
de los polígonos que comparten el vértice. Luego, se puede usar
interpolación bilineal, para interpolar las normales sobre el polígono.
Una
vez obtenidas las normales en cada punto, se puede hacer cálculos de
sombreado independientes. Normalmente, este proceso se combinará con la
rasterización del polígono.
Sombreado Phong producirá imágenes mas suaves que con el sombreado Gouraud, pero a un costo computacional mayor.
Recortado de caras traseras
En una escena, los objetos se tapan a sí mismos y entre sí, quedando siempre partes ocultas al observador.
Las partes ocultas deben ser eliminadas de posteriores operaciones: proceso de visibilidad.
El proceso de visibilidad es complejo, por lo que existen numerosas soluciones.
Técnicas implicadas:
- Cálculo de normales
- Ordenación
- Algoritmos de visibilidad
- Aceleración por coherencia
Técnicas de aceleración
o Eliminación de caras traseras
o Coherencia
o Contenedores
Algoritmo fundamental en el espacio de la imagen: trazado de visuales (ray casting)
Algoritmos más conocidos:
Z- Buffer
Prioridad en lista
Scan- Line
Buffer de Profundidad
El z-buffering,
o el buffer de profundidad es la parte de la memoria de nuestra tarjeta
gráfica encargada de la visibilidad de nuestros gráficos 3D según las
coordenadas de sus pixeles, con lo que se puede gestionar qué elementos
de una escena renderizada son visibles y cuales permanecerán
ocultos según sus posiciones en el eje Z (distancia a cámara).
En
definitiva lo que se hace es comparar las profundidades de ambos
gráficos para representar el objeto más cercano al observador. La
profundidad elegida se guardará en el z-buffering reemplazando a la
anterior.
Transparencias
La
implementación de la transparencia en un programa OpenGL no suele ser
sencilla. Podemos combinar los colores de los objetos para una escena
simple que contenga unas pocas superficies opacas y transparentes
utilizando el valor de mezcla alpha para especificar el grado de
transparencia y procesando las superficies según su orden de
profundidad. Pero las operaciones de mezcla de color OpenGL ignoran los
efectos de refracción, y el manejo de superficies transparentes en
escenas complejas con una diversidad de condiciones de iluminación o con
animaciones puede resultar muy complicado. Así mismo, OpenGL no
proporciona ninguna funcionalidad para simular la apariencia superficial
de un objeto translúcido (como por ejemplo un cristal esmerilado), que
dispersa de manera difusa la luz transmitida a través del material
semitransparente. Por tanto, para mostrar superficies translúcidas o los
efectos de iluminación resultantes de la refracción, necesitamos
describir nuestras propias rutinas. Para simular los efectos de
iluminación a través de un objeto translúcido, podemos utilizar una
combinación de valores de textura superficial y de propiedades del
material. Para los efectos de refracción, podemos desplazar las
posiciones de píxel para las superficies que se encuentren detrás de un
objeto transparente.
El blending es simplemente una técnica que se puede utilizar para obtener efectos de transparencias.
La
transparencia mediante el blending es tan difícil como incómoda, pero
si se controlan algunos aspectos de la escena, se puede conseguir el
efecto deseado sin demasiada complejidad.
Buffer de Stencil
Stencill
Buffer es una memoria intermedia que analiza y actualiza píxeles (con
sus operaciones) junto con buffer de profundidad. Añade planos de bits
adicionales para cada píxel además de los bits de color y profundidad.
Stencil
Buffer se puede pensar que simplemente etiqueta los píxeles en la
interpretación o renderización de la escena en la pantalla para
controlar las siguientes interpretaciones. Los pasos son siguientes:
1. Dada una escena con una sombra fija. Los píxeles de la escena se podrían considerar con “dentro” de la sombra o “fuera”. Asumimos que podemos etiquetar cada píxel apropiadamente.
2. Cuando
los píxeles ya son etiquetados, actualizamos los píxeles etiquetados
como “dentro” de la sombra. Y renderizamos la escena con la fuente de
luz desactivada.
3. Después actualizamos los píxeles etiquetados como “fuera” de la sombra. Activamos la luz y renderizamos otra vez.
Buffer de acumulación
El
buffer de acumulación sirve para capturar el buffer de color en un
fotograma y aplicarle acumulaciones del color de otro fotograma/s. Esto
básicamente sirve para simular el efecto de estela que deja un objeto
cuando se mueve muy rápidamente en el encuadre de la cámara.
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.
Se considerarán cuatro tipos básicos de fuentes, que serán suficientes para generar las escenas más sencillas:
1. Luz ambiente
2. Fuentes de punto
3. Spotlights (Luces direccionales)
4. Luces distantes
Fuentes de color
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.
Se
describe una fuente mediante una función de intensidad o luminancia de
tres componentes: Cada uno de los componentes es la intensidad de los
componentes rojo, verde y azul independientes.
Luz Ambiente
Como
el modelo de iluminación es local, las partes que no están iluminadas
por una fuente de luz se verían totalmente negras. Para evitar esto, se
supone que hay una iluminación uniforme que es el promedio de la luz
reflejada por los objetos, a la que llamamos ambiental.
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 una 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.
Spotlights (Luces 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 θ.
Spotlights
más realistas se caracterizan por una distribución de luz dentro del
cono, normalmente con la mayoría de la luz concentrada en el centro del
cono.
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. 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.
En
la práctica, los cálculos para fuentes de luz distantes son similares a
los cálculos para proyecciones paralelas; se reemplaza la ubicación de
la fuente de luz por una dirección de la fuente de luz. Por lo tanto, en
coordenadas homogéneas, una fuente de luz de punto en p0 se representará internamente como una matriz columna de cuatro dimensiones
donde la fuente de luz distante se representa mediante
que es la representación de un vector.
Intensidad Completa
La intensidad completa exclusivamente para efectos de iluminación es la siguiente:
#include <GL/glut.h>
GLfloat anguloCuboX = 0.0f;
GLfloat anguloCuboY = 0.0f;
GLfloat anguloEsfera = 0.0f;
GLint ancho=400;
GLint alto=400;
GLfloat anguloCuboY = 0.0f;
GLfloat anguloEsfera = 0.0f;
GLint ancho=400;
GLint alto=400;
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, -4, 4, -5, 10);
glMatrixMode(GL_MODELVIEW);
ancho = width;
alto = height;}
void drawCube(void){
glMatrixMode(GL_MODELVIEW);
ancho = width;
alto = height;}
void drawCube(void){
glShadeModel(GL_SMOOTH);
glColor3f(1.0f, 0.0f, 0.0f);
glBegin(GL_POLYGON); //cara frontal
glVertex3f(-1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 0.0f, 1.0f);
glVertex3f( 0.0f, 1.0f, 0.0f);
glVertex3f(-1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 0.0f, 1.0f);
glVertex3f( 0.0f, 1.0f, 0.0f);
glEnd();
glShadeModel(GL_SMOOTH);
glColor3f(0.0f, 1.0f, 0.0f);
glShadeModel(GL_SMOOTH);
glColor3f(0.0f, 1.0f, 0.0f);
glBegin(GL_POLYGON); //cara trasera
glVertex3f(-1.0f, 0.0f, -1.0f);
glVertex3f( 1.0f, 0.0f, -1.0f);
glVertex3f( 0.0f, 1.0f, 0.0f);
glEnd();
glVertex3f( 1.0f, 0.0f, -1.0f);
glVertex3f( 0.0f, 1.0f, 0.0f);
glEnd();
glShadeModel(GL_SMOOTH);
glColor3f(0.0f, 0.0f, 1.0f);
glColor3f(0.0f, 0.0f, 1.0f);
glBegin(GL_POLYGON); //cara lateral izq
glVertex3f(-1.0f, 0.0f, 1.0f);
glVertex3f( -1.0f, 0.0f, -1.0f);
glVertex3f( 0.0f, 1.0f, 0.0f);
glEnd();
glShadeModel(GL_SMOOTH);
glColor3f(1.0f, 1.0f, 0.0f);
glBegin(GL_POLYGON); //cara lateral dcha
glVertex3f(1.0f, 0.0f, 1.0f);
glVertex3f( 1.0f, 0.0f, -1.0f);
glVertex3f( 0.0f, 1.0f, 0.0f);
glVertex3f( 1.0f, 0.0f, -1.0f);
glVertex3f( 0.0f, 1.0f, 0.0f);
glEnd();
glShadeModel(GL_SMOOTH);
glColor3f(1.0f, 0.0f, 1.0f);
glBegin(GL_QUADS); //cara abajo
glVertex3f( 1.0f,0.0f, -1.0f);
glVertex3f( 1.0f, 0.0f, 1.0f);
glVertex3f(-1.0f,0.0f, 1.0f);
glVertex3f(-1.0f, 0.0f, -1.0f);
glEnd();}
glColor3f(1.0f, 0.0f, 1.0f);
glBegin(GL_QUADS); //cara abajo
glVertex3f( 1.0f,0.0f, -1.0f);
glVertex3f( 1.0f, 0.0f, 1.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();
// glRotatef(anguloCuboX, 1.0f, 0.0f, 0.0f);
glRotatef(anguloCuboY, 0.0f, 1.0f, 0.0f);
drawCube();
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -5.0f);
glRotatef(anguloEsfera, 0.0f, 1.0f, 0.0f);
glTranslatef(3.0f, 0.0f, 0.0f);
glColor3f(1.0f, 1.0f, 1.0f);
glFlush();
glutSwapBuffers();
anguloCuboX+=0.1f;
anguloCuboY+=0.1f;
anguloEsfera+=0.2f;}
void init(){
glClearColor(0,0,0,0);
glEnable(GL_DEPTH_TEST);
ancho = 400;
alto = 400;}
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
// glRotatef(anguloCuboX, 1.0f, 0.0f, 0.0f);
glRotatef(anguloCuboY, 0.0f, 1.0f, 0.0f);
drawCube();
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -5.0f);
glRotatef(anguloEsfera, 0.0f, 1.0f, 0.0f);
glTranslatef(3.0f, 0.0f, 0.0f);
glColor3f(1.0f, 1.0f, 1.0f);
glFlush();
glutSwapBuffers();
anguloCuboX+=0.1f;
anguloCuboY+=0.1f;
anguloEsfera+=0.2f;}
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 Giratoria");
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutIdleFunc(idle);
glutMainLoop();
return 0;
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowPosition(100, 100);
glutInitWindowSize(ancho, alto);
glutCreateWindow("Piramide Giratoria");
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutIdleFunc(idle);
glutMainLoop();
return 0;
jueves, 18 de octubre de 2012
Proyecto Unidad 2
Proyecto Unidad 2
Código Fuente
#include <glut.h>
float angX=0.0f,angY=0.0f;
int ResX=800,ResY=600;
enum{EJE=2};
float angB=0.0f,angC=0.0f,angDE=0.0f;
float aceX=0.0f,aceY=-0.0001f;
float velX=0.001f,velY=0.0f;
float posX=0.0f,posY=10.0f;
//Colores
GLfloat material [4] = {1.0f, 0.2f, 0.2f, 1.0f };
GLfloat RedMaterial [4] = {1.0, 0.0, 0.0, 1.0 };
GLfloat WhiteMaterial [4] = {1.0, 1.0, 1.0, 1.0 };
void EjesReferencia()
{
glNewList(1,GL_COMPILE);
glBegin (GL_LINES);
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, WhiteMaterial );
glVertex3f ( 0.0, 0.0, 0.0);
glVertex3f ( 0.0, 0.0,20.0);
glEnd();
glEndList();
}
void pEJE(){
glNewList(2,GL_COMPILE);
glPushMatrix();
glutSolidSphere(0.5f,100,100);
glPopMatrix();
glEndList();
}
void RenderScene(void){
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
//camara
glLoadIdentity( );
glTranslatef(1.0f,0.0f,-10.0f);
glRotatef(angY,1.0f,0.0f,0.0f);
glRotatef(angX,0.0f,1.0f,0.0f);
//EJES DE REFERENCIA
glLineWidth(5);
glCallList(1);
glPushMatrix();
glScalef(1,1,1);
glTranslatef(1.0f,1.0f,1.0f);
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, RedMaterial );
glPushMatrix();
glTranslatef(posX,posY,0.0f);
glCallList(EJE);
glPopMatrix();
glutSwapBuffers();
}
void idle(void){
velY+=aceY; posY+=velY;
velX+=aceX; posX+=velX;
if(posY<0.0f){posY=0.0f; velY*=-0.8f;
if(velY<0.01f){velX=0.0f; velY=0.0f;}
}
glutPostRedisplay();
}
int main(int a, char *b[]){
glutInit(&a,b);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(ResX,ResY);
glutInitWindowPosition(100,100);
glutCreateWindow("Proyecto");
glutDisplayFunc(RenderScene);
glutIdleFunc(idle);
glViewport( 0, 0, ResX, ResY );
glMatrixMode( GL_PROJECTION );
glLoadIdentity( );
glFrustum(-(float)ResX/ResY, (float)ResX/ResY, -1.0, 1.0, 1, 1000.0);
glMatrixMode( GL_MODELVIEW );
glLoadIdentity( );
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glShadeModel(GL_SMOOTH);
EjesReferencia();
pEJE();
glutMainLoop();
return 0;
}
Traslación
#include <GL/glut.h>
void display(void)
void display(void)
{
glClear (GL_COLOR_BUFFER_BIT);
glTranslatef(-2.0, -2.0, 0.0);
glColor3f(1.0, 0.6, 0.2);
glBegin(GL_POLYGON);
glVertex2f (2.0, 2.0);
glVertex2f (7.0, 2.0);
glVertex2f (7.0, 7.0);
glVertex2f (-2.0,
7.0);
glEnd();
glFlush (); }
void init (void)
{glClearColor (0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-3.0, 6.0, -2.0, 6.0, -5.0, 5.0);
}int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (250, 250);
glutInitWindowPosition (100, 100);
glutCreateWindow ("hello");
init ();
glutDisplayFunc(display);
glutMainLoop();
return
0;
}
ESCALACION
#include <GL/glut.h>
void display(void)
{
glClear (GL_COLOR_BUFFER_BIT);
glScalef(0.5, 0.5,
0.0)
glColor3f (1.0, 0.8, 0.6);
glBegin(GL_POLYGON);
glVertex2f (2.0, 2.0);
glVertex2f (7.0, 2.0);
glVertex2f (7.0, 7.0);
glVertex2f (2.0, 7.0);
glEnd();
glFlush ();
} void
init (void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-3.0, 6.0, -2.0, 6.0, -5.0, 5.0);
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (250, 250);
glutInitWindowPosition (100, 100);
glutCreateWindow ("hello");
init
();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
ROTACION
#include <GL/glut.h>
void display(void)
{
glClear (GL_COLOR_BUFFER_BIT);
glRotatef(45.0, 0.0, 0.0,1.0)
glColor3f (0.2, 0.8, 0.6);
glBegin(GL_POLYGON);
glVertex2f (2.0, 2.0);
glVertex2f (7.0, 2.0);
glVertex2f (7.0, 7.0);
glVertex2f (2.0, 7.0);
glEnd();
glFlush ();
}
void init (void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-4.0, 4.0, 1.0, 6.0, -3.0, 8.0);
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (250, 250);
glutInitWindowPosition (100, 100);
glutCreateWindow ("hello");
init
();
glutDisplayFunc(display);
glutMainLoop();
return 0;
TRASLACION
#include
<GL/glut.h>
void display(void)
{
glClear
(GL_COLOR_BUFFER_BIT);
glTranslatef(-2.0, -2.0, 0.0);
glColor3f(1.0, 0.6, 0.2);
glBegin(GL_POLYGON);
glVertex2f (2.0, 2.0);
glVertex2f (7.0, 2.0);
glVertex2f (7.0, 7.0);
glVertex2f (-2.0, 7.0);
glEnd();
glFlush ();
}
void init (void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-3.0, 6.0, -2.0, 6.0, -5.0, 5.0);
}
int main(int argc,
char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE |
GLUT_RGB);
glutInitWindowSize (250, 250);
glutInitWindowPosition (100, 100);
glutCreateWindow ("hello");
init ();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
ESCALACION
#include
<GL/glut.h>
void display(void)
{
glClear
(GL_COLOR_BUFFER_BIT);
glScalef(0.5, 0.5, 0.0)
glColor3f (0.2, 0.8, 0.6);
glBegin(GL_POLYGON);
glVertex2f (0.0, 0.0);
glVertex2f (5.0, 0.0);
glVertex2f (5.0, 5.0);
glVertex2f (0.0,
5.0);
glEnd();
glFlush ();
}
void init (void)
{
glClearColor (0.0, 0.0, 0.0,
0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-3.0, 6.0, -2.0, 6.0, -5.0, 5.0);
}
int main(int argc,
char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE |
GLUT_RGB);
glutInitWindowSize (250, 250);
glutInitWindowPosition (100, 100);
glutCreateWindow ("hello");
init ();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
ROTACION
#include <GL/glut.h>
void display(void)
{
glClear
(GL_COLOR_BUFFER_BIT);
glRotatef(45.0, 0.0, 0.0,1.0)
glColor3f (0.2, 0.2, 0.6);
glBegin(GL_POLYGON);
glVertex2f (0.0, 0.0);
glVertex2f (2.5, 0.0);
glVertex2f (2.5, 2.5);
glVertex2f (0.0, 2.5);
glEnd();
glFlush ();
}
void init (void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-4.0, 4.0, 1.0, 6.0, -3.0, 8.0);
}
int main(int argc,
char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE |
GLUT_RGB);
glutInitWindowSize (250, 250);
glutInitWindowPosition (100, 100);
glutCreateWindow ("hello");
init ();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
Suscribirse a:
Comentarios (Atom)














