Buenas. Estoy retomando la programación en 3d y se me ocurrió hacer un miniproyecto para ir calentando, pero ahora he visto que lo que tenía pensado escapa a mis conocimientos.
La idea es una cámara en primera persona que se mueva por un planeta chiquitín. Nada más. Quiero que el jugador se pueda desplazar libremente por el planeta. ¿El problema? Los puñeteros ángulos de la cámara.
¿Cómo hago para que la cámara, al desplazarse por el planeta, tenga el ángulo correcto? Es decir, que desde la perspectiva de la cámara, el suelo siempre esté abajo y el cielo arriba. Gráficamente este es el problema:
El eje de coordenadas pequeño de debajo a la derecha son las coordenadas globales. La flecha roja es el eje X, la verde es el Y, y la azul el Z. Los otros tres ejes de coordenadas son de una hipotética cámara desplazandose por el planeta. El eje verde (Y) es hacia donde mira la cámara, y el eje azul (Z) la dirección hacia donde el cielo debería quedar para la cámara.
El problema es conseguir que los ejes de la cámara tomen esta apariencia al desplazarse:
Y, además, permitir al jugador girar la cámara libremente como si de un shooter se tratase. El jugador debería poder controlar los ejes azul y rojo con el ratón.
Lo que he intentado hacer para solucionar el problema es muy burro y artesanal. El motor que uso tiene una instrucción para hacer que un objeto apunte a otro. Lo que he intentado es que la cámara en cada frame apunte al centro del planeta y después se le aplica la rotación a los ejes vertical y lateral que corresponda. El problema entonces es que según la latitud en que la cámara se encuentre, ésta gira bien o no. Y la verdad es que no tengo ni idea de por qué le pasa esto.
He estado buscando y he encontrado algo llamado cuaterniones (quaternions en el idioma del imperio) y aunque más o menos sé que es lo que hacen, no tengo ni idea de como aplicarlos al problema, aunque estoy casi seguro de que son parte de la solución.
Si alguien me puede ayudar se lo agradeceré de por vida. Si no pues nada, me busco otro entretenimiento.
La idea es una cámara en primera persona que se mueva por un planeta chiquitín. Nada más. Quiero que el jugador se pueda desplazar libremente por el planeta. ¿El problema? Los puñeteros ángulos de la cámara.
¿Cómo hago para que la cámara, al desplazarse por el planeta, tenga el ángulo correcto? Es decir, que desde la perspectiva de la cámara, el suelo siempre esté abajo y el cielo arriba. Gráficamente este es el problema:
El eje de coordenadas pequeño de debajo a la derecha son las coordenadas globales. La flecha roja es el eje X, la verde es el Y, y la azul el Z. Los otros tres ejes de coordenadas son de una hipotética cámara desplazandose por el planeta. El eje verde (Y) es hacia donde mira la cámara, y el eje azul (Z) la dirección hacia donde el cielo debería quedar para la cámara.
El problema es conseguir que los ejes de la cámara tomen esta apariencia al desplazarse:
Y, además, permitir al jugador girar la cámara libremente como si de un shooter se tratase. El jugador debería poder controlar los ejes azul y rojo con el ratón.
Lo que he intentado hacer para solucionar el problema es muy burro y artesanal. El motor que uso tiene una instrucción para hacer que un objeto apunte a otro. Lo que he intentado es que la cámara en cada frame apunte al centro del planeta y después se le aplica la rotación a los ejes vertical y lateral que corresponda. El problema entonces es que según la latitud en que la cámara se encuentre, ésta gira bien o no. Y la verdad es que no tengo ni idea de por qué le pasa esto.
He estado buscando y he encontrado algo llamado cuaterniones (quaternions en el idioma del imperio) y aunque más o menos sé que es lo que hacen, no tengo ni idea de como aplicarlos al problema, aunque estoy casi seguro de que son parte de la solución.
Si alguien me puede ayudar se lo agradeceré de por vida. Si no pues nada, me busco otro entretenimiento.