- A maioria dos sistemas de coordenadas de tela / bitmap 2D tem o eixo Y positivo apontando para baixo (com a origem no canto superior esquerdo).
- Isso é contrário à maneira como a maioria das pessoas pensa geometricamente com o eixo Y positivo apontando para cima (com a origem no centro).
Como a maioria dos jogos gerencia os dois sistemas de coordenadas 2D diferentes? Existem dois tipos principais de coordenadas (tela vs. cartesiana), mas pode haver muitos espaços de coordenadas diferentes: espaço de sprite, espaço do mundo, espaço de visualização, espaço da tela, etc.
Fundo:
Originalmente, fiz com que as coordenadas do mundo no meu jogo correspondessem à convenção de coordenadas da tela 2D. Isso tornou muito natural o uso das rotinas de desenho gráfico, mas surgiram problemas sutis ao usar funções trigonométricas como atan2 (). Os resultados da alimentação das coordenadas da tela atan2 () 2D são muito confusos porque atan2 () assume que o eixo y positivo aponta para cima.
Então mudei minhas coordenadas mundiais para seguir o sistema de coordenadas cartesianas clássico (com a origem na parte inferior esquerda da tela). O raciocínio com atan2 () é muito mais direto, mas agora é mais difícil executar outros tipos de raciocínio:
- Se eu clicar na tela aqui, qual sprite está por baixo?
- Onde eu cliquei nesse sprite?
- Se um sprite é desenhado no local errado, o que foi calculado incorretamente? A tela coordena ou o mundo coordena?
Percebo que a conversão da tela para coordenadas cartesianas envolve simplesmente escalar o valor de y em -1 com uma tradução opcional de ambos os valores (x, y). Estou mais interessado nas práticas recomendadas para design de jogos:
- A maioria dos jogos segue a convenção de coordenadas da tela e muda seu pensamento sobre como coisas como atan2 () devem funcionar?
- Quando / como são feitas as conversões do sistema de coordenadas? (Usando matrizes, abstração OOP, etc)
- Os locais dos sprites são armazenados como o centro do sprite ou um dos cantos? A altura / largura do sprite indo na direção "errada" parece ser um problema comum quando os desenho.
Embora minha pergunta seja principalmente sobre jogos 2D, parece que o OpenGL usa um sistema de coordenadas em que o eixo Y aponta para cima. O OpenGL deve eventualmente projetar essas coordenadas 3D em um sistema de coordenadas da tela 2D. Talvez alguma orientação possa ser encontrada no método OpenGL ...