Billboards
Billboard cilÃndrico (método 2)
El método que veremos a continuación no es tan rápido como el primero, pero es un auténtico billboard.

Figura 5. Objetos correctamente orientados
Para poder aplicar este método los objetos deberán poseer una posición especificada en coordenadas de mundo, asà como la cámara también tendrá una posición conocida en coordenadas de mundo.
Nuestros objetos poseerá tres vectores: superior (up), derecho (right) y dirección (lookAt) que podrÃan poseer los siguientes valores iniciales:
right = (1, 0, 0)
up = (0, 1, 0)
lookAt = (0, 0, 1)
Para que el objeto se encuentre bien orientado, debemos hacerlo rotar un cierto ángulo mediante su eje “vector up”.

El vector dirección debe cambiar al vector formado por la posición de la cámara y la posición del objeto:
objToCam = pos. cámara – pos. objeto
Luego, fijaremos la componente Y del vector objToCam a cero, debido a que deseamos la proyección de este vector sobre el plano XZ. A partir de allà el algoritmo es el siguiente:
. Normalizar vector objToCam proyectado.
. Realizar el producto punto entre el vector dirección de objeto y vector objToCamProy, para obtener el coseno del ángulo alfa.
. Obtener alfa, realizando un arcoseno.
. Rotar el vector dirección y derecha utilizando este ángulo.
Para rotar un vector tomando como eje otro vector un cierto ángulo podemos utilizar la función de la librerÃa de extensión de DirectX D3DXMatrixRotationAxis y D3DXVec3TransformCoord.
Primero creamos una matriz de rotación:
D3DXMatrixRotationAxis(&matriz_salida, &vector_eje, ángulo);
Luego, transformamos los vectores utilizando dicha matriz:
D3DXVec3TransformCoord(&vector_derecha,& vector_derecha, &matriz_salida);
Billboard esférico (método 2)
Y por último, el verdadero billboard esférico. Este método es muy similar al anterior, de hecho como primer medida deberemos rotar el objeto sobre su eje Y tal cual lo hicimos antes, y luego deberemos hacer lo propio rotando el objeto sobre su eje derecha para que mire correctamente la cámara.
El modo de calcular el ángulo es exactamente el mismo, sólo que ahora no deberemos proyectarlo sobre el plano XZ sino sobre el plano ZY, luego normalizarlo, luego obtener el arcoseno del ángulo entre el vector dirección y dicho vector proyectado y finalmente rotar el vector dirección (no el original sino el ya procesado en el paso anterior) y el vector arriba por el ángulo obtenido.
Hecho esto habremos obtenido los vectores dirección, derecha y arriba de nuestro objeto, mediante los cuales crearemos una matriz de mundo para que al procesar los vértices del objeto, el mismo se encuentre debidamente orientado.
Point sprites
Los point sprites son sprites representados por sólo un punto que siempre se encuentran orientados hacia la cámara. Posee como ventaja, el bajo consumo de memoria además de ser rápidos en su dibujado. Dado que – como mencionamos anteriormente – se encuentran siempres orientados a la cámara, no es necesario reorientarlos.
Sin embargo, los point sprites tienen algunas contras y en muchos casos se deshecha su uso debido a ellas. Principalmente, para poder emplearlos deben estar soportados por hardware (aunque hoy dÃa casi todas las placas del mercado deberÃan soportarlos siempre es bueno chequear si la caracterÃstica está presente antes de intentar utilizarla). Por otro lado, son poco flexibles debido a que – entre otras cosas – no se les puede especificar coordenadas de texturas para mostrar sólo una parte de una imagen.
Espero que este breve tutorial les haya sido útil.
~fuzzyLogic





Comentarios (1)



Muy buen tutorial