Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Camara en OpenGL

Iniciado por angelfmarcos, 18 de Enero de 2007, 10:19:42 PM

« anterior - próximo »

angelfmarcos

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

Buffon

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().

Lex


angelfmarcos

Hola

Me sigue dando el mismo problema, dependiendo de la rotación me cambia el signo de las coordenadas.

Un saludo






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.