Color
Teoría del color
•
El color es una longitud de onda de luz, visible para el ojo humano
390nm
720 nm
•
El color que vemos en los objetos es resultado de la luz reflejada por su
superficie
•
El negro es la ausencia de color. Un objeto negro no refleja nada
•
El blanco es la combinación de todos los colores. Un objeto blanco refleja
todas la luz que le llegaLas tres componentes del color
•
El ojo humano tiene tres tipos de células receptoras de luz
– el primer tipo se excita más con fotones de longitud de onda rojiza
– el segundo tipo se excita más con fotones de longitud de onda verde
– el tercer tipo se excita más con fotones de longitud de onda azulada
•
El cerebro mezcla la combinación de las tres y devuelve un solo colorresultado
•
De esta forma, cualquier color que vemos es en realidad una
combinación de ondas con longitudes dentro del espectro visible
Espacio de color
•
Es un espacio 3D cuyas dimensiones son las componentes R, G y B
•
Variando cada eje entre 0 y 1 obtenemos el cubo de color, que incluye
todos los colores visibles al ojo humano
G
Verde (0,1,0)
Amarillo (1,1,0)
Blanco(1,1,1)
Cian (0,1,1)
G
s(
se
ri
,x)
,x
x
Negro (0,0,0)
Rojo (1,0,0)
R
Azul (0,0,1)
B
Magenta (1,0,1)
Sombreado de polígonos
•
Para definir el color activo (con el que se pintan los vértices) se usa:
void glColor3f (GLfloat rojo, GLfloat verde, GLfloat azul)
void glColor3ub (GLfloat rojo, GLfloat verde, GLfloat azul)
•
Si todos los vértices tienen el mismocolor, todo el polígono es constante
•
Si cada vértice tiene un color diferente, el color del interior del polígono
dependerá del modo de sombreado elegido:
G
– Modo plano: el color del polígono es el
del último vértice
glShadeModel (GL_FLAT)
– Modo interpolado: el color del
polígono se deduce a partir del color
de cada vértice
R
glShadeModel (GL_SMOOTH)
B
G
//Activa el sombreado suave
glShadeModel (GL_SMOOTH);
// Dibuja el triángulo
glBegin (GL_TRIANGLES);
R
B
•
Cambiando a modo de
sombreado plano, el triángulo
quedaría entero de color azul
// Vértice rojo
glColor3ub (255, 0, 0);
glVertex3f (100, 0, 0);
// Vértice verde
glColor3ub (0, 255, 0);
glVertex3f (0, 100, 0);
// Vértice azul
glColor3ub (0, 0, 255);
glVertex3f (0, 0, 100);glEnd();
24 bits
Bits de color
•
Si el sistema operativo no puede mostrar 24
bits color, éste busca los colores más
adecuados --> no es preciso cambiar el
código!
•
Lógicamente, la calidad de la imagen será
diferente
•
Si el número de bits color es
pequeño, podemos indicarle
a OpenGL que use tramas
para aproximar el color real:
glEnable (GL_DITHER);
8 bits condithering
8 bits
Modo indexado de color
•
OpenGL también permite trabajar directamente con la paleta de color, en
lugar de usar las componentes RGB
•
Para establecer el color activo se usa:
void glIndexi (GLint indice);
•
Ventajas del modo indexado:
– es más rápido (sólo se utiliza un valor por pixel)
– permite animaciones de paleta
– permite usar el color para indicarotra magnitud
•
Desventajas
– no permite efectos de iluminación
Ejemplo: navegador 3D en color
void PanelVista_Paint(TObject *Sender)
{
switch (ModoColor) {
case 2:
// modo sólido
glPolygonMode(GL_FRONT,GL_FILL);
glCullFace(GL_BACK);
glEnable(GL_CULL_FACE);
glEnable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
break;
case 1:
// modo alámbricoglPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
glDisable(GL_CULL_FACE);
glDisable(GL_DEPTH_TEST);
glClear(GL_COLOR_BUFFER_BIT);
}
// Transformación de vista
glPushMatrix();
gluLookAt (...);
// dibujamos los objetos
RenderWorld();
glPopMatrix();
}
Iluminación
Luz ambiente
•
Es la luz que no viene de ninguna dirección particular
•
Aunque provenga de una fuente, después de...
Regístrate para leer el documento completo.