Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Billboards En Opengl

Iniciado por Lord Trancos 2, 10 de Marzo de 2005, 10:49:02 PM

« anterior - próximo »

Lord Trancos 2

 Actualmente uso un código como el siguiente para dibujar un objeto en escena:


// Convierto la quaternion del objeto en una matriz
_m := QUAT_ToMatrix2(@q);

// A esa matriz le pongo la posicion del objeto
_v := FObjects[_c].pos;
MATRIX_SetTranslation(_m, @_v);

// Multiplico la anterior matriz por la matriz de camara
_m3 := MATRIX_Mul(@_m, @g_Camera_Matrix);

// Cargo el resultado en OpenGL
glLoadMatrixf(@_m3[0]);


El problema lo tengo cuando quiero dibujar un billboard.... no se que he de hacerle a la matriz para que salga bien.
Pensaba que con coger los vectores right, up y look de la matriz de camara y ponerselos a la matriz final (_m3), ya lo tendria, pero parece ser que no....  <_<

¿Alguna ayudita plis? :)
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

Pogacha

 Si tenes los vectores Derecha=d y Arriva=a:

float l=Lado;
Vector p=Posicion_Del_Billboard;
Vector v[4];

a.Normalizar();
d.Normalizar();

v[0]= p - (d - a) * l;
v[1]= p + (d + a) * l;
v[2]= p + (d - a) * l;
v[3]= p - (d + a) * l;

satic TexCoord t[4] = { {0,0}, { 1,0 }, { 1,1} , {0,1} }; // son estaticos

glArrayDeVectores(v);
glArrayDeTexCoords(t);
glDibujarQuad();


Para que sean alineados a la pantalla, sino puedes sacar nuevos a y d:

Vector m = p - Origen_Camara;
Vector a =  m x d_Original_De_La_Camara;
Vector d =  m x a_Original_De_La_Camara; // revisar los signos

con el nuevo a y d haces lo de arriva y ahi lo tienes alineados a la camara.

Saludos.






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.