Cuando
empezamos a hablar de las texturas ya adelantamos que se trataba de un
tema mucho más complejo que el "poner un dibujo encima de
un objeto". En este artículo haremos hincapié en usos
menos comunes de las texturas. Paradójicamente, quizás sea
por eso mismo que estas técnicas gocen de bastante popularidad
en la demoscene, donde la inventiva y la originalidad se valoran incluso
más que la técnica. Pero antes, completaremos un tema que
dejamos pendiente el mes pasado.
 |
Coordenadas
de mapeado esféricas |
Como en el caso
del cilindro, las coordenadas de mapeado de una esfera se obtienen a
partir de un cambio de sistema de coordenadas. En este caso, el cambio
se realiza entre el sistema de coordenadas cartesianas (el más
utilizado, en el que un punto se expresa a partir de sus coordenadas
X, Y y Z) al sistema de coordenadas esféricas, en el que la posición
de un punto se expresa en función de la distancia al origen (r)
y dos ángulos (q y j).
Las ecuaciones
que gobiernan el cambio de coordenadas de un sistema al otro son:
X=r*sin(j)*cos(q)
Y=r*sin(j)*sin(q)
Z=r*cos(j)
Y las inversas:
r = raíz
(X2+Y2+Z2)
q = atan
(Y/X)
j = acos(Z/raíz
(X^2+Y^2+Z^2))
donde:
- "atan()"
es la arcotangente, es decir, la inversa de la tangente.
- "acos()"
es el arcocoseno, el inverso del coseno.
- "raíz()"
es la raíz cuadrada.
"En
coordenadas esféricas la posición de un punto se representa a
partir de la distancia al origen y dos ángulos"
|
De forma análoga
a lo que sucedía en el caso del cilindro, si utilizamos las coordenadas
de mapeado esféricas sobre una esfera, el valor de ‘r’ será
constante en toda la superficie de la esfera (que al fin y al cabo,
es lo que cuenta). Esto es así porqué ‘r’ se corresponde
con el radio de la esfera. En consecuencia, ‘r’ se suele utilizar tan
sólo en mapeado 3D, nosotros utilizaremos q como coordenada U
de la textura y j como coordenada V. Puesto que sabemos el valor del
radio de la esfera, podemos utilizar:
V= acos(Z/r)
Algo que nos ahorra
hacer unas cuantas multiplicaciones y una raíz. Pero aún
quedan unos cuantos detalles que ya comentamos con el mapeado plano
y el cilíndrico:
- Establecer la
posición de la esfera (Pos) como origen de coordenadas.
- Utilizar los
ejes del objeto (EjeX, EjeY y EjeZ) para orientar correctamente la textura.
- "Normalizar"
las coordenadas de mapeado.
con lo que las
fórmulas quedan como:
U= atan[(EjeX·(P-Pos))/
(EjeY·(P-Pos))]/2p
V= acos[EjeZ·(P-Pos)/r]/p
"Aparte
de los tres métodos clásicos de obtener las coordenadas de mapeado
de un objeto, se pueden utilizar muchos otros según convenga"
|
Haciendo esto,
obtendremos las coordenadas con valores entre 0 y 1. Ahora sólo
queda adaptar las coordenadas al tamaño de la textura:
U’=frac(U*factor_u)*ancho_textura
V’=frac(V*factor_v)*alto_textura
Recordemos que
"factor_u" y "factor_v" eran unos parámetros
que nos permitían modificar el tamaño aparente de la imagen
sobre el objeto. En el caso de las esferas, indican cuántas veces
se repetirá la textura en la dirección horizontal y la
vertical.
|