Para auto-educação, estou escrevendo um mecanismo de plataformas 2D em C ++ usando SDL / OpenGL. Inicialmente, comecei com SDL puro usando os tutoriais em sdltutorials.com e lazyfoo.net, mas agora estou usando SDL para criar um contexto de renderização OpenGL e renderizar com funções OpenGL (modo especificamente imediato, mas estou aprendendo sobre VAOs / VBOs ) Estou usando SDL apenas para interface, áudio etc.
O SDL usa um sistema de coordenadas com a origem no canto superior esquerdo da tela e o eixo y positivo apontando para baixo. É fácil configurar minha projeção ortográfica no OpenGL para refletir isso.
Eu sei que as coordenadas de textura são um sistema do lado direito com valores de 0 a 1 - inverter a textura verticalmente antes da renderização (bem, inverter o arquivo antes do carregamento) produz texturas que são renderizadas corretamente ... o que é bom se eu estiver desenhando toda a textura, mas no final vou usar conjuntos de peças e posso imaginar problemas.
Com o que devo me preocupar em termos de renderização quando faço isso?
Se alguém tiver algum conselho ou já tiver feito isso e puder apontar armadilhas futuras, isso seria ótimo, mas qualquer pensamento seria apreciado.
Respostas:
"Com o que devo me preocupar em termos de renderização quando faço isso?" - não muito. Um sistema de coordenadas é apenas uma convenção, não uma regra rígida e rápida, e isso é perfeitamente legal e válido. Apenas certifique-se de que você seja consistente em seu próprio uso e de que tudo funcione bem.
fonte
Ao trabalhar em 2D com o OpenGL, costumo usar o canto superior esquerdo como origem. Isso pode ser feito com:
No entanto, existem algumas armadilhas ao alterar a origem para o canto superior esquerdo.
Uma armadilha que encontrei mais de uma vez:,
glScissor()
que é usada para recortar, sempre usa coordenadas no canto inferior esquerdo.Sua assinatura é:
onde
x, y
especifique o canto inferior esquerdo da caixa de tesoura.De maneira mais geral, todas as funções que operam nas coordenadas da janela usam a parte inferior esquerda como origem. Isto inclui funções como
gluProject
,gluUnProject
,glCopyPixels
, etc.Mas algumas funções como
glDrawPixels
usoglRasterPos
para posicionamento eglRasterPos
usa coordenadas de objeto (ou seja, transformadas) .Se você está executando no Linux e sabe como usá-
man
lo, convém pegar uma cópia das páginas de manual do OpenGL aqui: ftp://ftp.sgi.com/sgi/opengl/doc/ Acho que são em tempo real - economizador.Além disso, notei que você diz "virar o arquivo antes de carregar" texturas. Isso não é necessário. Em vez de inverter a imagem ao carregá-la, basta virar as coordenadas da textura para ir de 1,0 a 0,0 ao renderizar.
fonte