 |
Texturas
procedurales |
Otro tema interesante
es la posibilidad de generar texturas mediante fórmulas matemáticas.
Nos volvemos a encontrar con multitud de fórmulas a utilizar,
tan sólo hay que tomar las mismas precauciones que en el caso
anterior. También conviene señalar que el ordenador nos
permite otras posibilidades más allá de las matemáticas
convencionales. En el siguiente pseudocódigo, por ejemplo, se
genera un patrón de cuadros, semejante a un tablero de ajedrez,
a partir de las coordenadas U y V.
U’=frac(U*factor_u)
V’=frac(V*factor_u)
If (U’>0.5)
XOR (V’>0.5)
Color_objeto=color1
Else
Color_objeto=color2
También
podemos generar texturas en tres dimensiones y, según la fórmula
de la textura procedural, ahorrarnos algunos pasos. El siguiente algoritmo
crearía una textura similar a la anterior, pero extendida a las
tres dimensiones.
U’=frac(P.x*factor_u)
V’=frac(P.y*factor_v)
W’=frac(P.z*factor_w)
If (U’>0.5)
XOR (V’>0.5) XOR (W’>0.5)
Color_objeto=color1
Else
Color_objeto=color2
Nótese que
se utiliza el mismo sistema de coordenadas que en el mapeado plano (coordenadas
cartesianas) sin tener en cuenta la forma, la orientación ni
la posición del objeto. De ahí que se puedan obtener algunos
resultados bastante insólitos.
En el CD-ROM, los
ejemplos de esto se llaman VAR2.EXE y VAR3.EXE y las correspondientes
escenas VAR_1.RAY y VAR_2.RAY.
 |
Máscaras
de objeto
|
Aquí, la
táctica es utilizar las texturas de una forma bastante diferente
a la vista hasta ahora. Se crea una textura un tanto especial (que llamaremos
"máscara"), normalmente con sólo dos colores,
uno indicando la "presencia" del objeto y otro su "ausencia".
La idea consiste en, cuando se calcula la intersección del rayo
con él, comprobar qué color de la textura le corresponde
al punto de intersección, y según el color de este punto,
considerar la intersección como "válida" (con
lo que procederemos como es habitual) o "no válida",
por lo que no la tendremos en cuenta, como si no existiese. El resultado
es que en la superficie del objeto aparecerán agujeros y se podrá
ver a través de él.
"Algunas
de las escenas de ejemplo sólo funcionan con versiones concretas
del programa. Se pueden distinguir fácilmente por el nombre"
|
También
se tiene que tener en cuenta que hay objetos (como las esferas) con
más de un punto de intersección. En estos casos, si se
produce la intersección por la cara interior del objeto habrá
que invertir el vector normal a la superficie del objeto, o de lo contrario
la iluminación no se calculará correctamente.
El inconveniente
de esto es que se tienen que calcular las coordenadas de mapeado siempre
que queramos comprobar si existe intersección con un rayo de
luz, aunque sea posible que al final el objeto sea "tapado"
por otro que se encuentre más cerca del origen del rayo.
Como en los anteriores
casos, también hallaréis un programa de ejemplo para este
efecto, llamado VAR4.EXE, y dos escenas, VAR_4.RAY y VAR_4B.RAY. Esta
técnica solo se ha implementado en el caso de las esferas, y
de una forma un tanto irregular, tan solo para probar su funcionalidad.
 |
No
se vayan todavía…
|
Esto que hemos
explicado es sólo una pequeña muestra de lo que se puede
hacer con texturas. Aún se pueden hacer muchas más cosas
con texturas. Quizás, más adelante, volvamos a sacar el
tema de las texturas y de lo que se puede hacer con ellas.
|
 |
Textura
procedural 3D extensión del "tablero de ajedrez" bidimensional.
Como puede verse en la esfera, el hecho de no utilizar coordenadas
de mapeado esféricas en la esfera produce efectos curiosos en la
textura. |
 |
Esfera
con una máscara en forma de estrella. La fuente de luz se encuentra
en el interior de la esfera. Los dibujos en el plano no son una
textura aplicada utilizando coordenadas polares, sino que se deben
a la luz que sale de los agujeros estrellados. |
|