Estou fora do hobby de Desenvolvimento de Jogos há um bom tempo. Quando eu fiz isso, a maioria das pessoas usava o Direct Draw para criar jogos 2D. Quando parei, as pessoas estavam dizendo que o OpenGL ou Direct3D com uma projeção ortogonal é o caminho a percorrer.
Estou pensando em voltar a criar jogos 2D, principalmente no celular, mas talvez também na plataforma XNA. Para criar algo usando o OpenGL, eu teria uma pequena curva de aprendizado (esperançosamente) para me acostumar ao desenvolvimento 3D.
Existe alguma razão para ignorar isso e, em vez disso, trabalhar com uma estrutura 2D em que eu apenas tenho um buffer de quadro Largura x Altura que preciso preencher com pixels?
Respostas:
Você definitivamente deve usar algo que use um renderizador 3D no back-end. Mas no seu código de nível superior, você nem deveria ver o eixo Z. Tudo isso deve ser abstraído nos níveis mais baixos. Se você está manipulando pixels diretamente, provavelmente está fazendo algo errado.
Para meus próprios jogos, criei um conjunto de classes para lidar com objetos 2D. Minha lógica de jogo estava lidando apenas com as coordenadas xey. Minhas aulas também lidavam com coisas como rotação, redimensionamento, modos de mesclagem etc., etc.
Obviamente, também existem bibliotecas 2D que você pode usar - o Cocos2D é popular no iPhone. A maioria dessas bibliotecas, se não todas, será criada com as APIs 3D de nível inferior, para que se beneficiem da aceleração disponível.
fonte
Há um motivo para não usar a API 3D.
Somente computadores em NA, noroeste da UE e Japão os suportam ...
Eu moro no Brasil, por exemplo, meu computador irmão é novo, possui um processador multi-core, vários GB de RAM e, no entanto, não roda jogos de OpenGL.
Por exemplo, eu só posso jogar o Dwarf Fortress (use o OpenGL para renderizar gráficos ASCII) no meu próprio computador, em qualquer outro computador que eu ache que seja lento.
E isso não é um problema apenas do Brasil, perguntei às pessoas ao redor, e é comum em vários lugares do mundo ... A população que realmente possui cartões compatíveis com OpenGL ou Direct3D é uma minoria ...
Só que essa minoria recebe mais atenção das empresas ...
Mas se você estiver segmentando apenas esses mercados "tradicionais" (NA, Noroeste da UE, JP), então vá em frente!
EDITAR para aqueles que recusam votos: Obviamente, você não concorda, portanto, você tem PROVA que NINGUÉM envia mais computadores com chips VIA ou SIS de baixa qualidade (ou mesmo outros fabricantes desconhecidos ou piores) com nenhum ou apenas suporte ao OpenGL 1.0?
Eu tenho DUAS máquinas como essa em minha casa, e elas são novas (ambas têm mais de um núcleo, ambas têm 2 GB de RAM, ambas têm frequência de clock acima de 2 GHz ...)
Minha universidade tem 200 máquinas assim, mesmo algumas fabricadas pela Dell.
É simples, as GPUs são caras (mesmo as de baixa qualidade da Intel) e, em mercados pobres, é um luxo, as pessoas que compram máquinas para rodar o MS Word e lêem e-mails não compram uma máquina com um chip gráfico decente quando eles podem comprar um que seja 50 dólares mais barato, especialmente quando 50 dólares é o que a maioria das pessoas tem para comprar comida por um mês inteiro.
POR FAVOR, não venha aqui dizendo que estou dizendo BS, se você nunca visitou um país do terceiro mundo, e também, não diga que as pessoas do país do terceiro mundo não jogam, eles fazem muito, Osmos A postagem do desenvolvedor sobre o lançamento da versão Linux deles, apontou que muito tráfego de entrada (na verdade, a maior parte) era da Rússia, claramente porque essas pessoas geralmente são ignoradas.
Aqui no Brasil, o jogo mais popular é o Counter-Strike, rodando no modo Software ... Algumas Lan-Houses possuem apenas 10% das máquinas com GPU, mesmo as mais grandes com 200 ou 300 estações ...
Eu não deveria ter postado sobre isso, sabia que isso atrairia votos negativos, tenho perda de pontos grátis por postar isso, toda vez que explico por que meu outro jogo usa o Allegro 4.4 em vez de 5.0, porque 5.0 não suporta Direct Draw ou modo de software Recebo muitas críticas de muitas pessoas dizendo que sou uma espécie de mentirosa ou que sou estúpida por dizer essa verdade sobre a disponibilidade real da aceleração do OpenGL.
EDIT 2: Para poder jogar e desenvolver jogos com o OpenGL, tive que implorar para que meus pais e outras pessoas me comprassem uma GeForce 8600 (que foi a placa mais barata que achei que ainda podia rodar o Mass Effect 1 e outros UT3 - eles me compraram um, mas agora tenho vários anos sem receber outros presentes de novo, nem mesmo presentes de aniversário, por causa do preço, e espero que este cartão funcione por mais 3 ou 4 anos ...
EDIT 3:
Um exemplo prático: a Eletronic Arts criou um novo cliente para o Ultima Online que usa aceleração 3D para seus gráficos 2D ... Resultado: Muitos jogadores reclamam de taxas de quadros ridiculamente baixas e a EA recua na decisão de impor o uso de o novo cliente (agora é permitido continuar usando o antigo)
EDIT 4 em 2015: Esta resposta será deixada aqui principalmente como artefato histórico, atualmente a quantidade de computadores com chips extremamente ruins é baixa, mesmo em países do terceiro mundo, eles ainda existem, especialmente em computadores voltados para escritórios, mas não são isso mais comum, acho que não vale mais a pena trabalhar com APIs no modo de software; as APIs baseadas em OpenGL são o caminho a percorrer agora.
fonte
Não, não existe. Você obterá melhores efeitos e renderização mais rápida usando um renderizador em 3D. Por exemplo, aqui está um jogo 2D que eu criei há algumas semanas (em um fim de semana) - os efeitos orb se inclinam fortemente sobre os sombreadores 3D, embora, de muitas maneiras, sejam efeitos 2D. Da mesma forma, fiz uso extensivo da tecnologia de renderização disponível para este jogo - há três ou quatro efeitos diferentes de pixel shader, todos os quais me permitem desenvolver mais rápido e torná-lo mais bonito.
Abrace o 3d e ame-o, mas ame-o com um eixo a menos.
fonte
APIs 3D geralmente são o caminho a percorrer. As GPUs de hoje são projetadas para renderizar gráficos 3D, para garantir um desempenho bastante sólido. E, como disse ZorbaTHut, seguir a rota 3D permite tirar proveito de coisas como pixel shaders.
Realmente não existem mais APIs 2D por aí. O DirectDraw foi descontinuado e a maioria das bibliotecas baseadas em 2D / vetor lá fora usa o OpenGL ou o Direct3D para executar sua renderização de qualquer maneira. Até os kits de ferramentas de interface do usuário modernos estão aproveitando as APIs 3D para fazer sua renderização e composição. Veja o WPF (a mais recente estrutura de interface do usuário da Microsoft), por exemplo: ele usa o Direct3D para renderização.
fonte
Ainda existe um número surpreendente de máquinas realmente antigas por aí com aceleração 3D ruim e inexistente e drivers que nunca foram atualizados, de modo que o uso do DirectDraw ainda será muito mais rápido que o OpenGL ou o D3D. Eu experimentei isso enquanto trabalhava em um jogo multiplayer 2D com cerca de 10 anos agora, quando tentei escrever um novo backend de renderização no OpenGL para suportar outras plataformas. Muitos jogadores relataram que o modo OpenGL não era jogável devido às baixas taxas de quadros. Eu também concordaria com o pôster brasileiro de que isso é mais comum fora dos EUA e da Europa, mas ainda é verdade nesses lugares.
Se você estiver segmentando telefones celulares ou XNA, use definitivamente o 3D. Mas se você quiser criar um jogo que roda em qualquer PC, em qualquer lugar, eu diria que fique com o DDraw.
fonte
A única coisa em que consigo pensar é que o uso de uma API 3D sobre uma 2D adiciona alguma complexidade básica. No OpenGL, pelo menos, você precisa carregar e gerenciar texturas e, quando desenhá-las, precisa acertar a geometria. Uma camada de invólucro resolve esses problemas.
Dito isto, o uso de um back-end de gráficos 3D parece ter mais vantagens do que desvantagens, portanto, se você me perguntar, vale a pena o esforço.
fonte
Se o seu jogo é simples o suficiente e você deseja que ele funcione bem em máquinas de baixo custo, principalmente netbooks e laptops mais antigos (sem aceleração 3D ou muito pouco - gráficos integrados mais antigos da Intel, etc.), ainda vale a pena considerar Abordagem de buffer de quadros 2D
Se você está feliz por o jogo exigir pelo menos uma placa / chip ATi / NVidia low-end, a utilização de uma API 3D permitirá que você faça muitas coisas legais (mistura alfa, escala / rotação etc.) que seria complicado fazer bem / eficientemente em um renderizador de software puro.
Além disso, esteja ciente de que algumas coisas muito simples em '2D puro' se tornam mais interessantes quando o hardware 3D (e a filtragem bilinear / mistura alfa) está envolvido. Entenda o conceito de alfa pré-multiplicado. E pense também, por exemplo, em como você lidaria com as costuras entre os ladrilhos em um mapa de ladrilhos 2D, se quisesse uma vista com zoom / rotação.
Lembre-se também de que a taxa de preenchimento é limitada. E é surpreendentemente fácil alcançar esses limites em 2D. Você pode não ter muitos polígonos, mas se quiser muitas camadas de paralaxe combinadas com alfa, partículas ou pós-efeitos - poderá acabar preenchendo tantos pixels quanto um jogo 3D de ponta.
Mas geralmente, o hardware 3D é incrível, e a mistura aditiva é sua amiga :)
fonte