O OpenGL é apropriado para jogos em 2D?

44

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?

w4etwetewtwet
fonte
Eu acho que um benefício que o OpenGL para 2D tem é que você obtém o benefício dos shaders. Estes podem ser úteis para obter efeitos especiais. Outro benefício é que, se você já conhece o OpenGL, já estará familiarizado com a API.
Lysol 24/02

Respostas:

44

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:

Ortho vs perspective

(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

Outurnate
fonte
Muito obrigado! Eu só queria confirmação de que seria bom fazer isso.
W4etwetewtwet
4
Se você tem a aptidão e o interesse de usar o OpenGL para 2D, ele trará muitas recompensas que somente o OpenGL pode oferecer. Desempenho empolgante, compatibilidade entre plataformas ... Pense desta maneira. Quase todas as outras opções para 2D seriam construídas sobre o OpenGL de qualquer maneira. É uma grande oportunidade para cortar algumas "intermediários"
Steven Lu
2
@StevenLu e para não mencionar, sendo pouco mais de um programador de verdade
Outurnate
Ótima leitura! Obrigado por vincular isso. Sim: codificar seu 2D com OpenGL direto é apenas mais durão , é por isso que você deve fazê-lo.
Steven Lu
1
Você deve fornecer mais informações para esta resposta, em vez de apenas um link. Talvez explique por que o GL funciona em 2D (visualizações ortográficas) e quais vantagens ele traz (aceleração de hardware, efeitos de sombreamento).
23813 Sean Sean Middleditch
22

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:

  • A ordenação em Z é simplificada usando as coordenadas 3d do buffer de profundidade (observe a transparência)
  • a rotação e o dimensionamento do sprite são basicamente gratuitos, pois você usa quads texturizados independentes da resolução
  • se você estiver disposto a se restringir às placas gráficas compatíveis com OpenGL 2.0, poderá tirar proveito dos shaders, o que simplificará bastante a criação de efeitos especiais (borrões, efeitos de partículas, manipulação de imagem, substituição de cores) - sem mencionar que será muito mais rápido do que o lado da CPU

Essas são apenas algumas vantagens que vêm do topo da minha cabeça, acho que existem várias outras.

Kornel Kisielewicz
fonte
3
Por favor, restrinja-se a placas de vídeo com capacidade para OpenGL 2.0 (ou superior); o OpenGL 2.0 foi lançado em 2004, mesmo que esteja bastante desatualizado.
Slicedpan
@ Slicedpan, infelizmente alguns laptops / netbooks ainda vêm com placas Intel com suporte GL 1.4 max - pessoalmente, decidi abandoná-las, mas algumas pessoas (especialmente ao fazer jogos simples) podem querer apoiá-las.
Kornel Kisielewicz
16

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.

Josh
fonte
5

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.

Philipp
fonte
0

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.

Arne
fonte
-2

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.

Apollo SOFTWARE
fonte
Ótimo, meu primeiro voto negativo. Fico feliz em ver gamedev também odeia.
Apollo SOFTWARE
1
Eu acho que ilustrar um ponto através de exemplos do mundo real é desaprovado. Muito profissional.
Apollo SOFTWARE
7
Entretanto, votos negativos não indicam "odiadores". Os votos negativos são simplesmente uma maneira de a comunidade transmitir sua opinião sobre perguntas e respostas. Não é pessoal para você, então tente não agir dessa maneira. Concordo que o voto negativo deve ter comentado o motivo do voto negativo, pois você não sabe como melhorar a resposta sem feedback. Eu vou te dizer por que acho que foi votado abaixo. Só porque um indivíduo usa o OpenGL para jogos em 2D, não significa que seja apropriado. Você também precisa fornecer razões pelas quais é apropriado.
MichaelHouse
2
Sim, não sei por que as pessoas estão votando; o bit "usa OpenGL" que achei que deveria ser esclarecido com "usa OpenGL em plataformas que exigem isso" (ele usa APIs Direct3D ou específicas de console em qualquer lugar, exceto iOS / Anrdoid / OSX / Linux), mas isso é mais um esclarecimento do que uma correção.
23813 Sean Sean Middleditch
1
Eu não diminuí a votação, mas outro motivo para essa resposta ser inadequada é porque você está usando um mecanismo baseado em OpenGL, não o OpenGL bruto, que muda bastante as coisas.
W4etwetewtwet 17/07/2013