Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
1
Texturas
+ =
Introducción
S. Castro, N. Gazcón CG 2015
Modelo
Modelo + Sombreado
¿Qué determina el “aspecto” de un pixel?
• Iluminación
• Reflectancia del material de la superficie
• Posición del observador
• Medio participativo (niebla, polvo, humo, …)
Introducción
Hasta ahora hemos tenido escenas con
superficies suaves, uniformemente coloreadas
Esto no es real. En realidad las superficies son:
Multi-coloreadas, rugosas (muy pocas superficies son
perfectamente suaves), texturadas (madera, hojas, etc)
S. Castro, N. Gazcón CG 2015
Introducción
S. Castro, N. Gazcón CG 2015
Modelo
Modelo + Sombreado
Modelo + Sombreado
+ Textura
Introducción
S. Castro, N. Gazcón CG 2015
La mayoría de las superficies de los objetos del mundo real tales
como la madera, el mármol, ... no son de un único color sólido sino
que presentan una gran variedad de colores provenientes tanto de
los distintos efectos producidos por la luz como de las diferencias de
color en el material.
Es posible lograr efectos visuales muy interesantes aplicando
distintas texturas a la superficie de objetos tridimensionales.
Introducción
S. Castro, N. Gazcón CG 2015
¿Cuántos polígonos tiene cada escena?
Se adiciona detalle a la superficie.
Es demasiado caro adicionarlo geométricamente.
2
Introducción
S. Castro, N. Gazcón CG 2015
Se debe adicionar detalle a una superficie sin aumentar su complejidad
geométrica.
Para esto, una forma de hacerlo es pegar una imagen 2D que captura
el detalle de la superficie del objeto. Esto modifica las propiedades de la
superficie usadas en el cálculo de la iluminación sin cambiar la
geometría subyacente y dando una ilusión de detalle.
La complejidad de la imagen no aumenta la complejidad en el
procesamiento.
Introducción
S. Castro, N. Gazcón CG 2015
El mapeo de textura puede hacer que una superficie se vea
interesante aunque no lo sea geométricamente.
Introducción
S. Castro, N. Gazcón CG 2015
+ =
Introducción
S. Castro, N. Gazcón CG 2015
Además de incorporar detalle, un
mapeo de textura permitirá cambiar
fácilmente la apariencia de los
objetos.
S. Castro, N. Gazcón CG 2015
Introducción
S. Castro, N. Gazcón CG 2015
Mapeo 2D Mapeo 3D
La aplicación de una textura a un determinado objeto se denomina mapeo de
la textura. Las técnicas de mapeo de texturas se pueden realizar ...
Las texturas se almacenan habitualmente en mapas de textura. A los mapas
2D se los denomina habitualmente texturas de superficie y a los 3D, texturas
volumétricas.
3
Introducción
S. Castro, N. Gazcón CG 2015
En el proceso de texturado de un objeto debemos considerar:
• El mapa de textura (en el que se
almacena la textura)
• El mapeo de la textura
Consideraremos ambos aspectos en el caso de:
• Texturas de superficie
• Texturas volumétricas
Las Texturas y
los Mapas de Textura
Las Texturas
Las texturas pueden ser volumétricas o de superficie
Ruido de Perlin Heeger y Bergen
Texturas estocásticas
S. Castro, N. Gazcón CG 2015
Las Texturas
S. Castro, N. Gazcón CG 2015
Un mapa de textura es un arreglo de valores que se almacenan en
la memoria de textura. Pueden ser 1D, 2D ó 3D.
El elemento unitario de textura se denomina texel.
Las Texturas
S. Castro, N. Gazcón CG 2015
En el caso más simple, los texels son valores escalares; ej. Color de la
superficie (RGB()).
Un caso más general contempla texels que pueden ser vectores; ej. en
un bump mapping, son normales a la superficie que permiten generar
una rugosidad aparente; en un mapa de ambiente, son vectores de
reflexión que permiten generar una superficie pulida y brillante.
También hay texturas que se generan algorítmicamente en lugar de
almacenarse en un arreglo.
Texturas de
Superficie
4
Introducción
S. Castro, N. Gazcón CG 2015
Las técnicas de texturado de superficie pueden agruparse en
texturas visuales y texturas espaciales.
Las texturas visuales son simulaciones planas de texturas
tridimensionales y no afectan la forma geométrica de la superficie.
Las texturas espaciales existen en el espacio tridimensional y
afectan la superficie de un objeto.
Introducción
S. Castro, N. Gazcón CG 2015
Texturas Visuales
Las texturas visuales simulan superficies texturadas, aunque éstas
no lo sean realmente. Una textura visual representando una pared
de ladrillos por ejemplo, se verá como un empapelado y será por lo
tanto diferente de una pared de ladrillos del mundo real.
Sin embargo son prácticas porque permiten agregar mucho detalle
rico y complejo a una superficie con una mínima inversión.
Algunas de las más útiles incluyen
mapeo de color y mapas
procedurales, así como también
mapeo de ambiente, bump mapping y
mapas de transparencia.
Introducción
S. Castro, N. Gazcón CG 2015
Texturas Espaciales
Las texturas espaciales están más cerca que las texturas visuales del
concepto de textura táctil real.
Las texturas espaciales pueden crearse modelando una red detallada de
polígonos planos. Esto es muy costoso en tiempo y además es poco
práctico.
Hay métodos más efectivos que
incluyen el uso de mapas de
desplazamiento y las técnicas de
modelado fractal.
Introducción
Las texturas 2D pueden almacenarse, por ejemplo, en un bitmap. En este
caso, son arreglos 2D de valores de color, cada uno de los cuales es un texel.
Esta textura puede escalarse para cubrir diferentes superficies de tamaño y
forma arbitrarios.
S. Castro, N. Gazcón CG 2015
Se vio que un texel es la menor unidad direccionable de un mapa de textura.
Cuando los objetos en la imagen están cerca, un texel se mapea a uno o más
pixels de la pantalla. Cuando los objetos están distantes, se promedian
múltiples texels en un pixel en la pantalla.
Introducción
En la textura de la derecha
El valor de la textura para un determinado texel
puede obtenerse mediante la siguiente función
float Sphere (float s, float t) {
float r = sqrt((s - 0.5)*(s - 0.5) + (t - 0.5)*(t - 0.5));
if (r <= 0.3)
return 1 - r/0.3;
else
return 0.2; } // 0.2 es el background
La función varía desde blanco en el centro a negro en el borde. Cualquier función que
puede calcularse para cada valor de s y t puede proveer una textura válida.
S. Castro, N. Gazcón CG 2015
Mapeo de Texturas
5
Mapeo de la Textura
S. Castro, N. Gazcón CG 2015
¿Cómo se traslada la textura al objeto?
Mapeo de la Textura
S. Castro, N. Gazcón CG 2015
Dado un objeto y un mapa de textura debemos ver entonces cómo
podemos aplicar este mapa sobre el objeto.
¿Cómo decidimos dónde debe aplicarse cada color de la imagen
sobre la geometría del objeto 3D?
En el mapeo de texturas 2D el mapeo consiste en establecer un mapeo
entre un punto de la superficie y la textura.
Cuando se renderiza un punto particular de la superficie:
Se busca el texel correspondiente en la imagen de textura
El color final del punto será función del texel correspondiente
Mapeo de la Textura
S. Castro, N. Gazcón CG 2015
Mapeo de la Textura
Hay distintas formas de hacerlo
S. Castro, N. Gazcón CG 2015
Distintas proyecciones Desplegado de la superficie
Atlas de texturas
Carta Atlas Superficie
Mapeo de la Textura
S. Castro, N. Gazcón CG 2015
¿Mapeo en el espacio del mundo o en el del objeto?
Mapeo de la Textura
S. Castro, N. Gazcón CG 2015
En el mapeo de texturas hay distintos sistemas de coordenadas
involucrados
texels
Espacio de la textura Espacio del objeto Espacio de la pantalla
6
Mapeo de la Textura
S. Castro, N. Gazcón CG 2015
Parametrización o Mapeo Renderizado
Hay dos etapas principales en el mapeo de texturas
Mapeo proyectivo compuesto
Mapeo de la Textura
Mapeo de Texturas Básico
Ejemplo del mapeo de una textura a un cuadro que está en la escena.
S. Castro, N. Gazcón CG 2015
Espacio 2D de la textura Espacio del objeto Espacio de la pantalla
Texturas de Superficie:
Mapeo o Parametrización
Mapeo de la Textura
S. Castro, N. Gazcón CG 2015
El concepto es simple: Definir un mapeo de la superficie al plano
Para cada triángulo en el modelo establecer una región correspondiente en la
textura dada.
Mapeo de la Textura
S. Castro, N. Gazcón CG 2015
Se asignan coordenadas de textura a cada vértice; se pueden tener 1,2,3 o 4
dimensiones de textura por vértice. Permite tener el índice en la textura para
recuperar el texel correspondiente.
Las coordenadas de textura las puede especificar manualmente el programador o
hacer que se generen automáticamente para cada vértice.
Se interpola durante la rasterización y el texturado mismo se realiza durante el
procesamiento de fragmentos.
Mapeo de la Textura
Mapeo de Texturas Básico
S. Castro, N. Gazcón CG 2015
Un mapeo directo
7
Mapeo de la Textura
Mapeo de Texturas Básico
S. Castro, N. Gazcón CG 2015
En este caso ¿cómo asociamos la textura al objeto? ¿Siempre se
conserva la relación de aspecto de la textura?
Se muestra un mapeo de una forma rectangular en otra donde la
principal distorsión está relacionada con el tamaño; así, el mapeo es
un escalado y luego seguirá la proyección en la pantalla.
Mapeo de la Textura
Mapeo de Texturas Básico
S. Castro, N. Gazcón CG 2015
Asociar un punto Pi a cada vértice Vi es equivalente a tener un polígono P en el espacio
de textura que tiene la misma cantidad de vértices que la cara C del objeto. Usualmente P
tiene la misma forma que C; entonces la parte de la textura dentro de P se copia en C sin
distorsión.
Cuando P y C tienen la misma forma el mapeo es afín; es un escalado acompañado
probablemente de una rotación y/o una traslación.
Primero veremos el caso básico más importante: mapear una textura en una superficie
plana. Ésta es una tarea de modelado
Texturas de Superficie:
Mapeo de Texturas sobre
Superficies Curvas
Mapeo de la Textura sobre Superficies Curvas
Veamos ahora cómo aplicar una textura sobre una superficie curva, tal como
un cilindro o una esfera. Dejaremos para más adelante cómo aplicar una
textura sobre una superficie cualquiera como, por ejemplo, una pieza de
ajedrez.
Asumimos que el objeto está modelado mediante una red poligonal, de modo
tal que consiste en un gran número de pequeñas caras planas.
Cada vértice de la red tendrá asociado un par de coordenadas de textura (si,
ti).
El objetivo es encontrar la coordenada de textura adecuada para cada vértice
de la red poligonal.
S. Castro, N. Gazcón CG 2015
Mapeo de la Textura sobre Superficies Curvas
Mapeo de una textura sobre una
superficie cilíndrica.
En el cilindro, asociamos s a la
coordenada asociada al ángulo y t a
la altura del mismo.
S. Castro, N. Gazcón CG 2015
s tz z
z z
a
b a
a
b a
,
s tz z
z z
a
b a
a
b a
,
Si hay N caras alrededor del cilindro, la i-ésima cara tiene su lado izquierdo sobre
el ángulo θi = 2πi/N, y su vértice superior izquierdo tiene coordenadas de textura
(si,ti) = ((2πi/N - θa)/(θb- θa), 1). Las coordenadas de textura para los otros 3
vértices se deduce de manera similar.
Mapeo de la Textura sobre Superficies Curvas
S. Castro, N. Gazcón CG 2015
Podemos mapear linealmente el cuadrado de textura en una porción
cuadrilátera de la esfera.
Mapeo sobre la Esfera
Otras alternativas podrían ser las siguientes:
8
Texturas de Superficie:
Rendering
Mapeo de la Textura
Cuando se rasterizan las primitivas:
Se deben tener las coordenadas de textura de cada vértice
Éstas se interpolarán linealmente dentro del triángulo
S. Castro, N. Gazcón CG 2015
Mapeo de la Textura
S. Castro, N. Gazcón CG 2015
Mapeo de la Textura
Interpolación de Coordenadas de Textura
¿Cuál es la perspectiva correcta?
S. Castro, N. Gazcón CG 2015
Textura
Mapeo de la Textura
• Interpolación de Coordenadas de Textura
Interpolación lineal en el espacio de la pantalla produce distintos
artefactos
S. Castro, N. Gazcón CG 2015
Mapeo de la Textura
Interpolación de Coordenadas de Textura
Notar que pasos uniformes en el espacio de la pantalla no
corresponden a pasos uniformes en el espacio del mundo
S. Castro, N. Gazcón CG 2015
La interpolación lineal en coordenadas de la pantalla no se corresponde
con la interpolación lineal en coordenadas del mundo o del ojo.
9
Mapeo de la Textura
Interpolación de Coordenadas de Textura
S. Castro, N. Gazcón CG 2015
Es necesario conocer la correspondencia entre f y g para que, dado el punto en
la pantalla para un f saber a qué punto corresponde en el mundo
Rendering de la Textura
Si nos movemos en pasos iguales a los largo de la recta Ls en la pantalla,
¿qué pasos debemos dar en los texels a lo largo de Lt en el espacio de
textura?
La figura muestra la línea AB en 3D que se transforma en la línea ab en 3D por
la matriz M. El punto A mapea a a y B mapea a b.
S. Castro, N. Gazcón CG 2015
Consideramos el punto R(g) que está a una fracción g del camino entre A y B.
Éste mapea a algún punto r(f) que está a una fracción f del camino entre a y b.
Las fracciones f y g no son las mismas. A medida que f varía de 0 a 1, ¿cómo
varía g? ¿Cómo se corresponde el movimiento a lo largo de ab con el que se
produce a lo largo de AB?
Rendering de la Textura
Interpolación bilineal incorrecta.
Problema agravado
en las rotaciones.
S. Castro, N. Gazcón CG 2015
Si bien el efecto es más visible en el mapeo de la textura, también se presenta en el sombreado.
Rendering de la Textura
Un patrón de muestreo uniforme en espacio de la pantalla corresponde
a algún patrón de muestreo en el espacio de textura que no
necesariamente es uniforme.
S. Castro, N. Gazcón CG 2015
Rendering de la Textura
La densidad de muestreo en el espacio de textura raramente coincide
con la densidad de las muestras en la textura misma.
S. Castro, N. Gazcón CG 2015
Rendering de la Textura
¿Cómo calculamos el color para asignarlo a esta muestra?
S. Castro, N. Gazcón CG 2015
10
Rendering de la Textura
Por otro lado, las coordenadas de textura interpoladas (s, t) son
valores continuos pero la imagen de textura está indexada
discreta.
¿Cómo calculamos el color de un pixel?
S. Castro, N. Gazcón CG 2015
La opción de usar el vecino más
cercano (la muestra más cercana)
utiliza el color del texel más cercano.
Simple y rápido pero de baja calidad.
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST)
En OpenGL:
Rendering de la Textura
Otra opción para calcular el color de un pixel
consiste en realizar una interpolación lineal
de los colores más cercanos.
S. Castro, N. Gazcón CG 2015
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR)
En OpenGL:
Rendering de la Textura
Tenemos entonces dos maneras de encontrar el color
S. Castro, N. Gazcón CG 2015
Rendering de la Textura
Cuando se busca un punto en la
textura se pueden producir efectos
indeseados.
S. Castro, N. Gazcón CG 2015
Rendering de la Textura
Magnificación
• Un pixel corresponde a una pequeña parte de un texel
• Esto resulta en muchos pixels que tienen el mismo texel
• Sin filtrado se produce aliasing
• Filtro de Magnificación: suaviza la transición entre pixels
S. Castro, N. Gazcón CG 2015
Ajustando la textura al pixel
La textura es demasiado pequeña para un
pixel
Rendering de la Textura
S. Castro, N. Gazcón CG 2015
Muchos pixels corresponden a
un texel “bloques” / jaggies /
aliasing
solución: aplicar promediado
(filtro de magnificación)
11
Rendering de la Textura
Desmagnificación
• Un pixel corresponde a varios texels
• Es común con el acortamiento en perspectiva
S. Castro, N. Gazcón CG 2015
Ajustando la textura al pixel
Muchos texels se corresponden con un
pixel.
Rendering de la Textura
Un pixel se corresponde con
varios texels
S. Castro, N. Gazcón CG 2015
Rendering de la Textura
S. Castro, N. Gazcón CG 2015
Una forma de solucionarlo
es mediante el promediado
Rendering de la Textura
Para evitar el aliasing es necesario prefiltrar la textura y remover así
las altas frecuencias
El prefiltrado es esencialmente una integración espacial sobre la
textura
Una integración espacial on the fly sobre la textura es sumamente
costosa. Esto debe hacerse en un paso de preprocesamiento.
S. Castro, N. Gazcón CG 2015
Rendering de la Textura
S. Castro, N. Gazcón CG 2015
Acortamiento en perspectiva y
mapeo pobre de textura hace que
el checkerboard se deforme
Mipmaps mejoran el mapeo. Es
una forma más elaborada de
realizar el filtrado evitando el
promediado (costoso)
Rendering de la Textura
Representación MIPmap (multium in parvo, significa
muchos en un lugar).
)
S. Castro, N. Gazcón CG 2015
Crear varias copias
Filtrar reduciendo en tamaño
Texturas pre-filtradas = mipmaps
Se selecciona la textura apropiada basándose en la cantidad de
pixels ocupados por la geometría
12
Rendering de la Textura
S. Castro, N. Gazcón CG 2015
Mipmaps
¿Cuánta memoria
adicional se requiere
para guardar la
textura de esta
forma?
Rendering de la Textura
S. Castro, N. Gazcón CG 2015
Optimización del
almacenamiento
Representación MipMap
Rendering de la Textura
S. Castro, N. Gazcón CG 2015
¿Cómo se calcula el nivel de MipMap?
Rendering de la Textura
S. Castro, N. Gazcón CG 2015
Mipmaps
Rendering de la Textura
S. Castro, N. Gazcón CG 2015
Sin filtrar MIP Map Suma de áreas
Texturas de Superficie:
Mapeo de Texturas con
Superficies Intermedias
13
Mapeo de Texturas con Superficies Intermedias
¿Cómo aplicaríamos una textura, por ejemplo, a esta superficie
poligonal?
S. Castro, N. Gazcón CG 2015
Mapeo de Texturas con Superficies Intermedias
Podemos pretender que la superficie es un clindro y movernos por la
textura asignándole coordenadas de la misma a la superficie. Sin duda
que la textura se verá distorsionada.
S. Castro, N. Gazcón CG 2015
Pi
Vi
Normal al Cilindro
Cilindro imaginario
que tiene la textura
Mapeo de Texturas con Superficies Intermedias
Métodos de Proyección
El mapeo de funciones para superficies 3D de formas arbitrarias no
puede encontrarse usualmente de manera simple. Hay distintas
formas de proyectar mapas de imágenes sobre superficies
tridimensionales.
S. Castro, N. Gazcón CG 2015
Mapeo de Texturas con Superficies Intermedias
Métodos de Proyección
Mapeo en dos etapas:
Mapeo S. Mapear la textura 2D a superficie intermedia 3D simple
(esfera, cilindro, cubo)
Mapeo O. Mapear la superficie intermedia (con la textura) a la
superficie destino del objeto (que está siendo renderizado).
S. Castro, N. Gazcón CG 2015
Mapeo de Texturas con Superficies Intermedias
Las dos etapas de mapeo
S. Castro, N. Gazcón CG 2015
Mapeo O. De la superficie intermedia al objeto
Mapeo S. De la textura a la superficie intermedia.
Normal Objeto Centroide Objeto Normal Sup. Intermedia Rayo reflejado
Mapeo de Texturas con Superficies Intermedias
S. Castro, N. Gazcón CG 2015
Mapeo a Superficies Intermedias (Mapeo S)
Podemos mapear la textura utilizando distintas superficies
intermedias:
plano
esférico
cilíndrico
caja (o cúbico)
14
Mapeo de Texturas con Superficies Intermedias
S. Castro, N. Gazcón CG 2015
Método de proyección plano
El mapa se aplica en las superficies de modo plano. Es ideal para
aplicar mapas de imágenes sobre superficies planas porque los
resultados son totalmente predecibles y la distorsión es mínima en
tanto las superficies tridimensionales sean paralelas a los planos de
proyección.
La proyección plana también puede aplicarse sobre objetos curvos
para simular distintos efectos.
Mapeo de Texturas con Superficies Intermedias
S. Castro, N. Gazcón CG 2015
Método de proyección cúbica
Este método de proyección es una variación del método plano, que
repite el mismo mapa u otro sobre cada una de las 6 caras de un
cubo.
Este método es particularmente efectivo con cubos en tanto una de
las caras del cubo sea paralela al plano de proyección.
Mapeo de Texturas con Superficies Intermedias
S. Castro, N. Gazcón CG 2015
Método de proyección cúbica
Se usan seis mapas planos, uno para cada cara del cubo.
Mapeo de Texturas con Superficies Intermedias
S. Castro, N. Gazcón CG 2015
Método de proyección cilíndrica
Este método aplica el mapa sobre la superficie juntando los
lados del mapa de modo de envolver el objeto con un mapa
cilíndrico.
Es útil para aplicarlo sobre objetos elongados tales como una zanahoria o
una botella de vino. Puede aplicarse de modo tal que la parte de arriba y la
de abajo no se cubran (not capped).
Mapeo de Texturas con Superficies Intermedias
S. Castro, N. Gazcón CG 2015
Método de proyección cilíndrica
Las coordenadas del objeto (x, y, z) se convierten a
(radio, , altura).
Para el mapeo de la textura, se convierte en
coordenada s y la altura h se convierte en coordenada t.
Esto posiciona el mapa de textura alrededor del objeto.
Mapeo de Texturas con Superficies Intermedias
S. Castro, N. Gazcón CG 2015
Método de proyección esférica
Esta proyección aplica un mapa rectangular rodeando el objeto
con el mapa y luego tomando ambos extremos (sup e inf) y
juntando cada uno de éstos hasta que se cubre todo el objeto.
Esta técnica es útil para proyectar mapas sobre objetos redondos tales
como una pelota, etc.
15
Mapeo de Texturas con Superficies Intermedias
S. Castro, N. Gazcón CG 2015
Método de proyección esférica
Convierte las coordenadas (x, y, z) a coordenadas
esféricas (, φ).
La longitud (φ) se convierte en coordenada s y la
latitud () en coordenada t.
(z no está apuntando hacia arriba en la imagen)
Mapeo de Texturas con Superficies Intermedias
S. Castro, N. Gazcón CG 2015
Método de proyección de warping
Esta proyección permite que las texturas sean proyectadas sobre una
superficie 3D de manera directa, pero también deformada ajustando los cuatro
lados del mapa sobre la superficie.
Este tipo de proyección es útil para proyectar texturas sobre objetos que
pueden requerir distintos estiramientos sobre el mapa para adecuarlo;
también es efectiva para aplicar texturas a pequeñas porciones de objetos 3D
Mapeo de Texturas con Superficies Intermedias
S. Castro, N. Gazcón CG 2015
Mapeo de la Superficie Intermedia al Objeto (Mapeo O)
¿Cuáles son, en cada uno de los casos las superficies intermedias
utilizadas?
Mapeo de Texturas con Superficies Intermedias
S. Castro, N. Gazcón CG 2015
Mapeo de Textura
Caso en el que es
adecuado un cilindro
como superficie
intermedia
Mapeo de Texturas con Superficies Intermedias
S. Castro, N. Gazcón CG 2015
Mapeo de Textura
Caso en que es
adecuada una esfera
como superficie
intermedia
Mapeo de Texturas con Superficies Intermedias
S. Castro, N. Gazcón CG 2015
Mapeo de Textura
Los objetos complejos usan diferentes mapeos sobre las distintas
partes .
16
Mapeo de la Textura
S. Castro, N. Gazcón CG 2015
Proceso de Mapeo
Bibliografía
S. Castro, N. Gazcón CG 2015
ACM SIGGRAPH Proceedings
Angel, E., Shreiner, D. Interactive Computer Graphics: A top-down approach
with shader-based OpenGL, Addison Wesley, 2011, 6th. Ed.
Foley, J., van Dam, A., Feiner, S. y Hughes, J., Computer Graphics. Principles
and Practice, Addison Wesley, 1992, 2nd Edition.
Hearn, D., Baker, M.P., Computer Graphics, C Version, Prentice Hall Inc.,
2003, 3rd Edition.
Hill, F. Jr, Kelley, S., Computer Graphics Using OpenGL, Prentice Hall., 2006,
3rd Ed.
Rost, R., Licea-Kane, B., Ginsburg, D., Kessenich, J., OpenGL Shading
Language, Addison-Wesley Professional, 3rd Edition, 2009.
Watt, A., Watt, M., Advanced Animation and Rendering Techniques: Theory
and Practice, Addison-Wesley Publishing Company, 1993.
S. Castro, N. Gazcón CG 2015