Como usar o OpenGL moderno para jogos em 2D?

9

Eu encontrei uma infinidade de tutoriais "modernos" do OpenGL (3.0+) para 3D, mas não encontrei quase nada ao procurar informações sobre como usá-lo no desenvolvimento de jogos em 2D. Como posso começar a usar o OpenGL para jogos em 2D?

Especificamente, estou interessado em obter respostas para os seguintes tópicos:

  • Como devo configurar minhas várias matrizes para projeção ortográfica?
  • Os shaders são tão usados ​​em aplicativos 2D quanto em 3D? Em caso afirmativo, qual é o seu objetivo na configuração 2D?
  • Como devo lidar com o grande número de texturas obviamente necessárias para um jogo 2D?

Peço desculpas pela pergunta relativamente ampla, mas passei muito tempo pesquisando e encontrei muito pouca informação útil que se aplica ao OpenGL moderno.

Alexis King
fonte

Respostas:

11
  • Como devo configurar minhas várias matrizes para projeção ortográfica?

Seu objetivo é 2D, certo? Então você não precisa de nenhuma projeção. Projeção é o ato de condensar um mundo 3D em um plano 2D. Defina o sombreador de forma que a coordenada Z de todos os vértices seja padronizada 0.0e você deve ser definido.

Você pode usar uma matriz de escala para as coordenadas X e Y. Dimensioná-lo de modo -10.0a 10.0torna-se -1.0a 1.0. Para fins de referência, a matriz para fazer isso é:

0.1   0.0   0.0
0.0   0.1   0.0
0.0   0.0   1.0
  • Os shaders são tão usados ​​em aplicativos 2D quanto em 3D? Em caso afirmativo, qual é o seu objetivo na configuração 2D?

Eles podem ser. Eles ainda podem ser usados ​​para iluminação por pixel, dando uma profundidade falsa aos objetos. Eles também podem ser usados ​​para efeitos de textura, efeitos de água, geração de imagens ... você pode até usá-los para fazer cálculos de física com um pouco de truque.

Outra maneira de colocar isso é: tudo o que eles são usados ​​em 3D. É aplicado de maneira diferente e não é tão bem documentado. Embora as pessoas que jogam jogos em 2D provavelmente não entrem no seu caso, se você não tiver efeitos reais, elas também não são necessárias.

Embora você precise conhecer o básico dos shaders para renderizar um sprite de qualquer maneira.

  • Como devo lidar com o grande número de texturas obviamente necessárias para um jogo 2D?

Assim como você faz em 3D. Cachos de objetos de textura, PBOs e um Atlas de textura ou alguns. Provavelmente algumas estruturas / classes e dores de cabeça também. Eu acho que isso seria chamado de "Gerenciamento de ativos", ou algo semelhante.

  • Como posso começar com o gamedev 2D?

Provavelmente existem alguns tutoriais por aí. Porém, como a versão 3D é mais comum, eu diria para aprender o OpenGL para 3D e depois aplicar o que você aprendeu na versão 2D. 3D e 2D são muito semelhantes, 2D simplesmente não controla a coordenada Z.

Wolfgang Skyler
fonte
5
Para 2D, você ainda pode usar a projeção ortográfica e coordenadas Z diferentes para fazer o buffer Z. Caso contrário, você precisará executar o algoritmo do pintor e desenhar na ordem certa.
congusbongus
@congusbongus na verdade, se você está spriting com transparência, você está muito provavelmente vai ter que fazer o algoritmo do pintor si mesmo ...
Panda Pajama