Hola
Tengo un proghrama que representa una escena. La parte de la camara la hago asi:
orientacion.GetEulerAngles (ang_a, ang_b, ang_c);
glTranslatef (-pos_x, -pos_y, -pos_z);
//Esto es para rotar sobre el centro de la escena
glRotatef (ang_a, 1.0f, 0.0f, 0.0f);
glRotatef (ang_b, 0.0f, 1.0f, 0.0f);
glRotatef (ang_c, 0.0f, 0.0f, 1.0f);
siendo orientación un quaternion que guarda las rotaciones de la camara.,
y pos_x, pos_y y pos_z la posicion de la camara
con esto consigo rotar la escena (la camara esta quieta)
El problema es que necesito obtener la posicion real de la camara (pos_x, pos_y y pos_z no me valen, pues al rotar la escena, la posicion cambia y no se refleja en estas variables)
Ahora mismo lo intento con el siguiente codigo:
glPushMatrix ()
glLoadIdentity ()
glRotatef (ang_c, 0.0f, 0.0f, 1.0f);
glRotatef (ang_b, 0.0f, 1.0f, 0.0f);
glRotatef (ang_a, 1.0f, 0.0f, 0.0f);
glTranslatef (-pos_x, -pos_y, -pos_z);
double matrix[16];
glGetDoublev (GL_MODELVIEW_MATRIX, matrix); //o algo asi, no me acuerdo de memoria
real_x = matrix[12];
real_y = matrix[13];
real_z = matrix[14];
glPopMatrix ()
De esta manera me de la posicion bien excepto porque dependiendo de la rotacion de la camara me cambia el signo de algunos de los valores
¿Alguna idea de que puede estar mal, o algún método mejor para obtener estos valores?
Gracias y un saludo
Ahora mismo no tengo mucho tiempo para contestarte :( pero mírate
gluUnProject()
gluUnProject4()
gluUnProject(......)
Maps the specified window coordinates (winx, winy, winz) into object coordinates, using transformations defined by a modelview matrix, projection matrix, and viewport. The resulting object coordinates are returned in objx, objy, objz. The function returns GL_TRUE, indicating success, or GL_FALSE, indicating failure (such as a noninvertible matrix). This operation does not attempt to clip the coordinates to the viewport or eliminate depth values taht fall outside of glDepthRange().
...
Hola
Me sigue dando el mismo problema, dependiendo de la rotación me cambia el signo de las coordenadas.
Un saludo