Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





[AYUDA] Problema con gluPerspective, gluLookAt y z

Iniciado por kittie4man, 17 de Julio de 2008, 08:07:42 PM

« anterior - próximo »

kittie4man

Hola nuevamente!!

Paso a comentar mi problema lo mas detallado posible.
En un miniframework que tengo (y mantengo) inicio la perspectiva con:
ratio = ( GLfloat )SCREEN_WIDTH / ( GLfloat )SCREEN_HEIGHT;
glViewport( 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT );

glMatrixMode( GL_PROJECTION );
glLoadIdentity( );

gluPerspective( 45.0, ratio, 0.1, 1024.0 );

glMatrixMode( GL_MODELVIEW );
glLoadIdentity( );

Despues, creo un objeto que no es mas que un cuadrado con textura.
Este lo creo, translado y roto en un mismo lugar:
glPushMatrix();
glTranslatef( _x, _y, _z);

glRotatef( _angleView, 0.0, 0.0, 1.0 );

glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0); glVertex3f(-30.0,  30.0, 7.5);
glTexCoord2f(0.0, 1.0); glVertex3f(-30.0, -30.0, 7.5);
glTexCoord2f(1.0, 1.0); glVertex3f( 30.0, -30.0, 7.5);
glTexCoord2f(1.0, 0.0); glVertex3f( 30.0,  30.0, 7.5);
glEnd();
glPopMatrix();

Hasta acá (según creo) todo bien. (no?)

Ahora, en el translate tengo que hacer que z (_z) sea -700 para que el objeto se vea, osea para que aparezca en la pantalla.
Eso me trae problemas ya que cuando yo ubico el objeto en la pos x=10 e y=10 y al tener z en -700 queda diferente de la x e y real de la pantalla.
Para que me entiendan les muestro esta captura:



Si se fijan donde esta el puntero del mouse, el objeto y comparan con lo que dice en la consola de abajo (x/ymouse y pj_x/y que son del cuadrado) veran que no coincide.

Mi pregunta es.
Porque tengo que situar mi objeto en -700?? Que hace que mi camara este tan adelante.

Espero que alguno me pueda ayudar.
Gracias de antemano.

Salu2
Juan Pablo

tamat

El problema es que si trabajas en perspectiva no puedes esperar una correlacion de la posicion X,Y con la posicion del raton (simplemente porque cuanto más lejos esté menos se desplazará en X,Y).

En esos casos se trabaja en Ortografica, entonces al no haber perspectiva siempre coincide, mirate la funcion glOrtho.

Si preguntas por qué -700?, pues porque con un FOV de 45º en una pantalla de ancho SCREEN_WIDTH si haces el calculo seguro que te sale que a una distancia 700 de la camara el desplazamiento en X e Y coincide con 1 pixel de pantalla (que es el desplazamiento del raton).

Por un stratos menos tenso

kittie4man

Muchas gracias por la rapidez en responder y mas por la calidad de la respuesta.

Yo antes trabajaba con glOrtho pero según tengo entendido es para hacer 2D con OpenGL no? se puede hacer control de camara con glOrtho??? Tipo rotar la escena y eso con glLookAt o alguna alternativa?

Salu2
Juan Pablo

tamat

En teoría si, pero no tendras perspectiva, ese es el unico problema, es decir, las cosas que esten lejos se veran igual de grandes.

En escenarios 3D con perspectiva si quieres arrastrar objetos con el raton tienes que reproyectar la posición del raton sobre el plano perpendicular a la camara que pasa por el centro del objeto y trasladar el objeto a ese punto.
Por un stratos menos tenso

kittie4man

Cita de: "tamat"En teoría si, pero no tendras perspectiva, ese es el unico problema, es decir, las cosas que esten lejos se veran igual de grandes.

En escenarios 3D con perspectiva si quieres arrastrar objetos con el raton tienes que reproyectar la posición del raton sobre el plano perpendicular a la camara que pasa por el centro del objeto y trasladar el objeto a ese punto.

Muchas gracias por la respuesta.

Si, me imagine que ese era el problema, osea que iba a tener que proyectar la posición del mouse para que encajen con la perspectiva.

Inicialmente no tengo pensado rotar la cámara, pero quería contemplarlo para que en un futuro, en caso de que desee hacerlo, no romperme la cabeza.

Muchas gracias.

Salu2
Juan Pablo






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.