Estoy tratando de implementar una camara para mi escena y estoy teniendo mas problemas de los que me esperaba.
Cada objeto (la camara es uno de ellos) de mi escena tiene asociando una matriz 4x4 con su matriz de transformacion para pasar al sistema global.
Que orden deberia seguir para multiplicar las matrices? Segun creia yo:
glloadIdentity()
glMultMatrixf(Inversa de la matriz camara);
Para cada objeto
glpushmatrix
glMultMatrixf(matriz objeto)
dibujar objeto
glpopmatrix
Pero no funciona :(
en teoría está bien, qué problema ves?
Nada que me lie de mala manera y me ha costao ver la luz un par de horas xD
Mas que nada me lio con que el sistema de la camara no es el de la "Camara a Mundo" sino el de "Mundo a Camara". Las rotaciones que se hacen a la camara no se aplican sobre el sistema "Camara a Mundo" sino sobre su inversa "Mundo a Camara" y ahi es donde fallaba pues intentaba rotar la camara y lo que me hacia era rotar el sistema Mundo.
Suele ocurrir que de vez en cuando me pongo a dudar en cosas que se supone ya tenia superadas xDD
Ahora mismo en mi clase Camara tengo tanto la matriz "Camara" (Camara a Mundo) como "Mundo"(Mundo a Camara). Cada vez que muevo la camara (Transformando "Mundo") Calculo la inversa y la guardo en "Camara". No se si esto es muy correcto pero lo cierto es que necesito la matriz "Camara" para hacer unos cuantos calculos, como añadir velocidad segun la orientacion de esta y esas cosas.
No acabo de entenderte, yo lo que hago es guardar la model de la camara (la comunmente llamada view) y cada objeto tiene su model propia. Luego al a hora de render pues lo que tu haces, saco inversa de camara, la subo, y todos se multiplican contra esa. Tenerlo todo en mundo es lo más comodo.
Digo esto porque no creo que sea necesario tener siempre la inversa, con que la tengas cuando haces render sobra.
Bueno lo he modificado para tenerlo como tu dices y parece que funciona. El problema era el orden en que multiplicaba las matrices a la hora de rotar la camara.
Solucionado ...demomento xD
Saludos