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? :)
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.