Estoy realmente con la cabeza ardiendo y aún no logro sacar esto...
Tengo dos sistemas de referencia. El primero es el real. 0 derecha, 90 arriba, 180 izquierda, 270 abajo. El jugador puede mirar hacia dónde quiera, y lo defino como vrDir. Es, en este sistema, hacia dónde mira el jugador.
El segundo sistema es respecto a la vista del jugador. En la pantalla, el jugador siempre, SIEMPRE mira hacia arriba (90). Si vrDir = 90, o sea, si yo miro hacia arriba, en la pantalla miraré hacia arriba y todo encaja. Pero si por ejemplo vrDir = 0, yo miro a la derecha, en la pantalla siempre miraría arriba. Eso significa que lo que yo tuviera enfrente, o sea, tuviera a la derecha del sistema original, aparecería arriba del todo en el sistema de la pantalla. En la pantalla, el sistema siempre está mirando hacia arriba. Así que cuando el personaje rota, el mundo rota al revés en la misma medida.
Mi objetivo es, dada una dirección del ratón en la pantalla, en el sistema del jugador, pasarlo al sistema original y, dado en el original, pasarlo a la pantalla. Realmente no lo logro...
Ejemplo: si yo miro a la izquierda (180), en la pantalla miraré SIEMPRE a 90. O sea, arriba veré lo que haya a la izquierda en realidad (180). Desde esa perspectiva, si yo eligiera la dirección 90, es decir, a mi frente (desde la pantalla), eso debería traducirse a 180 (hacia dónde miro). Si elijo 60 se traduciría en 150. Espero que entendáis la idea de los dos sistemas, el real que todos conocemos, y el del personaje, donde siempre el 90 está hacia arriba. Necesito pasar ángulos de uno a otro...
Sé que en ambas fórmulas deben intervenir vrDir, la dirección que quiero transformar, y creo que también el número 90, debe ser un conjunto de sumas y restas entre ellos, pero no lo saco. He llegado a sacar varias fórmulas medio exitosas, pero siempre fallaba algo
EDIT: no me creo cómo he tardado tanto
De pantalla a mundo: vrDir + (vrAng - 90)
De mundo a pantalla: vrAng - (vrDir - 90)
Podéis cerrar, o borrar, o lo que sea xD