Estou ensinando a mim mesma a biblioteca OpenGL há um tempo e quero começar a fazer um jogo. No entanto, para uma introdução mais fácil, quero começar com algo em 2D, como um jogo de cima para baixo no estilo Pokemon.
Esse é um bom plano ou o OpenGL foi desenvolvido especificamente para 3D?
Respostas:
O OpenGL é bastante apropriado para jogos 2D. Embora geralmente seja usado para 3D, a mesma funcionalidade pode ser usada para jogos em 2D. Ou seja, qualquer coisa que você possa fazer com o 3D OpenGL será aplicável com o OpenGL "2D".
Algumas informações adicionais podem ser encontradas neste local .
O 2D OpenGL é obtido da mesma maneira que o 3D OpenGL. O 2D OpenGL é apenas a aplicação de uma técnica, ou seja, renderizar a cena em um plano plano e, em seguida, usar uma projeção ortográfica em vez de uma projeção em perspectiva que, dependendo da configuração, pode distorcer a cena.
Um exemplo:
(a) é uma cena em uma projeção ortográfica. (b) é a mesma cena, usando uma projeção em perspectiva. Em um jogo 2D, isso pode causar um posicionamento incorreto dos sprites se a profundidade deles for alterada (o que, dependendo de como você desenvolve o desenvolvimento, pode ser o caso). O uso de uma projeção em perspectiva também dificulta o alinhamento das coisas nas coordenadas da tela.
Além disso, o OpenGL traz muitos, muitos, muitos benefícios. Principalmente, a aceleração de hardware é uma grande vantagem. Também há um grau de controle muito mais preciso sobre o que a placa gráfica faz e como ela funciona, permitindo otimizações específicas do caso
fonte
OpenGL como o nome indica é uma biblioteca de gráficos. Embora tenha sido desenvolvido com o 3d em mente, não há suposições codificadas na biblioteca que você usará o 3d. Além disso, graças às suas capacidades 3D, várias coisas que seriam difíceis de fazer em uma abordagem estritamente 2D são triviais. Exemplos:
Essas são apenas algumas vantagens que vêm do topo da minha cabeça, acho que existem várias outras.
fonte
Embora o OpenGL seja uma API 3D, você ainda pode usá-lo para criar jogos em 2D. Você pode falsificar um ambiente 2D em 3D através de várias técnicas, como restringir dados a um avião.
No entanto, há um suporte limitado na API real para fazer isso de uma maneira óbvia (não há função "ativar o modo 2D", por exemplo). As maneiras pelas quais você o simularia (que você pode encontrar em muitos tutoriais on-line) podem ser difíceis de entender completamente, sem entender o pipeline 3D que está sendo realmente usado sob o capô.
Parece que você está vendo o OpenGL há um tempo e provavelmente tem uma compreensão decente desses fundamentos. No entanto, se você se sentir inseguro com eles, poderá começar com o jogo usando uma biblioteca 2D criada sobre o OpenGL, como o cocos2d . Isso dará a você alguma experiência com a aparência geral das APIs 2D e ainda oferece os benefícios de um back-end 3D acelerado por hardware, se você sentir que não está pronto para resolver tudo sozinho.
fonte
Muitas bibliotecas gráficas 2D, como SDL ou SFML, usam a aceleração de hardware OpenGL. Isso oferece o benefício de desempenho do OpenGL, mas abstrai os detalhes desagradáveis de baixo nível por trás de uma API muito mais simples.
fonte
Agora tenho muita experiência em programação OpenGl e posso dizer que é uma dor. No passado, quando comecei a programar, eu era muito produtivo em ambientes simples como o BlitzBasic. Então comecei a dar o próximo passo aprendendo C ++ e OpenGl. E quando você não tem um bom professor ou pessoas para perguntar, você se depara permanentemente com a tela preta. O maior problema é o inferno do OpenGl. Existem vários switches que você pode trocar para alterar o estado do opengl. E alguns comutadores dependem de outros comutadores. por exemplo glGet (GL_TEXTURE_BINDING_2D) depende do glGet (GL_ACTIVE_TEXTURE). E a documentação de qual estado depende de qual outro estado não é o melhor. Muitas operações, como o carregamento de textura, exigem que você altere esse estado, o que muitas vezes leva à quebra de outro código que requer o estado antigo. E há esse problema que o OpenGl é um comportamento dependente da implementação, para que o seu programa seja executado na sua máquina, mas na outra máquina tudo o que você vê é preto. Tudo o que você pode fazer aqui é adivinhar o que há de errado em suas 10000 linhas de código. Então, se você gosta de frustração, sim, use o OpenGl para coisas 2D. Para todas as outras pessoas, não faça isso se não precisar. Você pode se tornar produtivo no OpenGl, mas isso lhe custará muito tempo e nervos. Provavelmente mais do que você deseja gastar. Você pode se tornar produtivo no OpenGl, mas isso lhe custará muito tempo e nervos. Provavelmente mais do que você deseja gastar. Você pode se tornar produtivo no OpenGl, mas isso lhe custará muito tempo e nervos. Provavelmente mais do que você deseja gastar.
fonte
O Unity3D usa o OpenGL, e eu o uso para plataformas 2D e 2.5D. O Unity3D é essencialmente um 3D Gaming Engine, mas também é usado para jogos 2D e 2.5D. Você pode ter planos x, y, z e limitar apenas o movimento ou a rotação a 2 desses planos, criando uma atmosfera 2D em um mundo essencialmente 3D.
fonte