- La mayoría de los sistemas de coordenadas de pantalla 2D / mapa de bits tienen el eje Y positivo apuntando hacia abajo (con el origen en la esquina superior izquierda).
- Esto es contrario a cómo la mayoría de la gente piensa geométricamente con el eje Y positivo apuntando hacia arriba (con el origen en el centro).
¿Cómo gestionan la mayoría de los juegos los dos sistemas de coordenadas 2D diferentes? Hay dos tipos principales de coordenadas (pantalla frente a cartesiano), pero podría haber muchos espacios de coordenadas diferentes: espacio de sprites, espacio mundial, espacio de vista, espacio de pantalla, etc.
Fondo:
Originalmente hice que las coordenadas mundiales en mi juego coincidieran con la convención de coordenadas de pantalla 2D. Esto hizo que fuera muy natural usar las rutinas de dibujo de gráficos, pero surgieron problemas sutiles al usar funciones trigonométricas como atan2 (). Los resultados de alimentar las coordenadas de la pantalla 2D atan2 () son muy confusos porque atan2 () supone que el eje y positivo apunta hacia arriba.
Así que cambié mis coordenadas mundiales para seguir el clásico sistema de coordenadas cartesianas (con el origen en la parte inferior izquierda de la pantalla). Razonar con atan2 () es mucho más directo, pero ahora es más difícil hacer otros tipos de razonamiento:
- Si hago clic en la pantalla aquí, ¿qué sprite está debajo?
- ¿Dónde hice clic en ese sprite?
- Si un sprite se dibuja en la ubicación incorrecta, ¿qué se calculó incorrectamente? ¿Las coordenadas de la pantalla o las coordenadas mundiales?
Me doy cuenta de que la conversión de la pantalla a coordenadas cartesianas implica simplemente escalar el valor de y en -1 con una traducción opcional de ambos valores (x, y). Estoy más interesado en las mejores prácticas para el diseño de juegos:
- ¿La mayoría de los juegos se limitan a la convención de coordenadas de pantalla y cambian su forma de pensar sobre cómo deberían funcionar cosas como atan2 ()?
- ¿Cuándo / cómo se realizan las conversiones del sistema de coordenadas? (Utilizando matrices, abstracción OOP, etc.)
- ¿Se almacenan las ubicaciones de los sprites como el centro del sprite o una de las esquinas? La altura / anchura del sprite que va en la dirección "incorrecta" parece ser un problema común cuando los dibujo.
Aunque mi pregunta es principalmente sobre juegos 2D, parece que OpenGL usa un sistema de coordenadas donde el eje Y apunta hacia arriba. OpenGL finalmente debe proyectar esas coordenadas 3D en un sistema de coordenadas de pantalla 2D. Quizás se pueda encontrar alguna orientación en el método de OpenGL ...