Saludos a todos.
Estoy empezando a programar en OpenGl y me surgen unas dudillas.
Por ahora no son muy complicadas y seguro que con vuestro nivel me las
sabreis responder
.
Bueno, al grano.
He programado una escena donde, por ahora, solo tengo puntos y lineas
que dibujan una casita en 3D (si, lo se, es muy triste)
.
Al pulsar una tecla, cambio la proyeccion: de paralela a conica y
viceversa.
Para ello he usado glFrustum y glOrtho. Redibujo la escena con cada una
dependiendo del caso.
Luego, situo la camara con gluLookAt
Mi problema viene al intentar mover la camara alrededor de la casita.
Cada vez que pulse alguno de los cursores, la camara debe rotar segun
la direccion correspondiente.
He pensado que lo mas facil es transformar a coordenadas esfericas cada
vez que quiera moverla, variar el angulo correspondiente y recalcular
las nuevas coordenadas.
Pues no va.
No se que hago mal (segurisimo que es una tonteria...
).
Os explico un poco como lo hago:
camx,camy,camz ==> posicion de la camara
objx,objy,objz ==> posicion del objeto
Estos son los argumentos que tiene el gluLookAt.
dist ==> es la distancia entre esos dos puntos, es decir el modulo de
ese vector.
Cada vez que pulso un cursor, pej Arriba, calculo los angulos
azim y elev usando las formulas:
azim = (M_PI/180) * atan(camx/camz);
elev = (M_PI/180) * asin(camy/dist);
Ahora incremento uno de los dos angulos, en este caso el elev,
elev += 15.0*(M_PI/180);
Recalculo las nuevas coordenadas camx,camy,camz usando las formulas (no
las pongo pq estas son largas....)
Y redibujo la escena con glutPostRedisplay();
De esta forma, como camx,camy,camz son argumentos de gluLookAt y estos
argumentos han variado, deberia funcionar, no?????
Sabeis que hago mal????
Gracias por leer este post tan largo y muchisimas gracias de antemano
para todos los que intenteis ayudarme.
A cuidarse.