Que alternativas ao GLUT existem?


12

Estou tentando aprender OpenGL e acabei de descobrir que o GLUT é obsoleto . Eu já sei SDL, e parece que é uma boa alternativa. Devo usar o SDL para desenvolver jogos com o OpenGL, ou existem alternativas melhores. Eu sou novo no desenvolvimento de jogos, então não sei muito sobre o estado da arte.

Respostas:


27

Acabei de descobrir que o GLUT é obsoleto.

É o que acontece quando você aceita a primeira resposta que encontra; você recebe informações ruins. O GLUT 3.7 não deve ser usado, mas o FreeGLUT é completamente compatível com ele.

No entanto, sua pergunta vai para outro lugar. Para fazer um jogo real, GLUT de * forma é inapropriada. Não dá a você o controle do loop principal, e você realmente precisa disso em um jogo (o FreeGLUT tem uma maneira de controlar o loop principal, mas ainda é estranho). GLUT é para escrever demonstrações gráficas. Isso é muito importante ao testar novos efeitos gráficos; portanto, ele deve estar na sua caixa de ferramentas quando necessário. Mas o seu código principal do jogo nunca deve usá-lo.

O GLFW é uma alternativa leve e centrada no jogo ao GLUT. Ele fornece suporte básico para coisas além da criação de uma janela OpenGL. Ele permite que você obtenha informações, carregue imagens como texturas e outras coisas.

SDL , SFML e Allegro 5 são todos kits de ferramentas multimídia. Eles podem criar janelas OpenGL, mas fazem muito mais que isso. Eles fornecem suporte completo para entrada, áudio e várias outras coisas necessárias para criar um jogo. Se você está fazendo um jogo, qualquer um desses é um bom ponto de partida. Pessoalmente, gosto do Allegro 5, mas esse é apenas o meu viés para uma boa documentação e uma API limpa.


1
O que os títulos AAA (somente para PC e multiplataforma) usam? Eles usam esses (GLFW, Allegro) que você mencionou, para lidar com a janela opengl? ou eles escrevem seu próprio 'tudo' do zero?
Quazi Irfan

@iamcreasy: "títulos AAA" (eu realmente odeio esse termo) não usam nenhum deles. Em geral, eles não usam nada de código aberto. Eles poderiam, mas se quiserem usar uma biblioteca, preferem usar uma biblioteca que seja suportada. Existem algumas exceções como ODL ou Bullet. Mas essas são exceções e não a regra.
Nicol Bolas

Desde quando o GLFW 'carrega imagens como texturas'? Definitivamente não está na lista de recursos; nem qualquer função que atenda remotamente a esse propósito no meu cabeçalho glfw.
Deceleratedcaviar

1
A outra grande desvantagem do GLUT é que seu modelo de entrada não é particularmente adequado para jogos; não há como obter códigos de teclas brutos ou obter eventos de imprensa / liberação nas próprias teclas modificadoras (por exemplo, usando ctrl como botão de disparo), nem há uma maneira de obter o contexto GL subjacente (necessário para ativar o vsync no X11, por exemplo).
macio

1
@ NicolBolas ah, esqueci-me do 2.7, eles [threads, imagens] foram declarados 'fora de contexto' para o lançamento do GLFW 3.0.
Deceleratedcaviar


2

Se seu objetivo é desenvolver um jogo,

Depende se você deseja que seu jogo seja multiplataforma ou não. Para jogos portáteis (Windows, Mac, Linux), SDL parece ser a única opção.

Se você segmentar apenas o Windows e / ou o XBox, existem alternativas muito melhores, por exemplo, o XNA, que o libera de escrever muito código manualmente.

Se seu objetivo é aprender OpenGL,

Basta programar em OpenGL bruto, mas esteja preparado para enfrentar muitos conceitos não intuitivos, matemática e grandes manuais.


Como Takumi disse, também há SFML como uma biblioteca portátil. Melhor do que SDL IMHO (é mais up-to-date.)
kaoD

8
-1: "Para jogos portáteis (Windows, Mac, Linux), SDL parece ser a única opção." Isso nem é remotamente verdade. O SFML e o Allegro 5 existem como alternativas perfeitamente válidas e ambos têm bases de plataforma mais amplas.
Nicol Bolas

1

GLUT é uma API e também uma biblioteca. A biblioteca original é realmente obsoleta. A API é uma coisa diferente, foi muito bom começar, ela só precisa de revisões para superar as limitações e atender a novas necessidades. A principal implementação atual é o FreeGLUT, que é suportado e não obsoleto. Isso significa que uma boa alternativa ao GLUT (como na biblioteca GLUT) é GLUT (como no FreeGLUT).

O problema observado acima com "controle do loop principal" está incorreto. Com as versões GLUT mais recentes, você pode ter um melhor controle sobre o loop do jogo (se isso for importante para você). A limitação foi corrigida por glutMainLoopEvent (). Esta e outras limitações são abordadas aqui:

http://en.wikipedia.org/wiki/OpenGL_Utility_Toolkit


" Com as versões mais recentes do GLUT, você pode ter um melhor controle sobre o loop do jogo (se isso for importante para você). " É um jogo, então sim , isso é importante para você. Além disso, glutMainLoopEventdificilmente é uma boa maneira de gerenciar o loop principal. Ele ainda usa um modelo orientado a eventos para fornecer dados, em vez de um modelo de pesquisa onde você obtém os dados desejados quando os deseja.
Nicol Bolas

Devo argumentar que o modelo orientado a eventos é mais eficiente do que a pesquisa, a menos que você esteja pesquisando dados armazenados a partir dos eventos (o que é bom). Os recursos do sistema de votação devem ser feitos com cuidado.
Ingemar Ragnemalm

0

O Qt suporta o OpenGL. Dê uma olhada no Open Inventor e considere se faz sentido ir diretamente para uma API 3D de nível superior.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.