Boa GUI para OpenGL? [fechadas]

65

Estou começando a aprender o OpenGL com o FreeGLUT usando o Superbible e o conhecimento que tenho dos meus gráficos elementares para aprimorar minhas habilidades.

Para aproveitar melhor essa experiência, quero integrar uma GUI para substituir a que o FreeGLUT usa, agora minha pergunta é a seguinte: isso é possível e qual biblioteca devo usar?

Algumas características da biblioteca:

  • Código aberto
  • Multiplataforma (Linux e Windows)
  • C / C ++

Se você tiver outras recomendações, não hesite em publicá-las juntamente com suas respostas para o meu problema.

Cristina
fonte
2
O OpenGL usa uma GUI por padrão desde quando? : L
O Pato Comunista
Era para dizer a biblioteca que eu estava usando, também conhecida como FreeGLUT.
Cristina
Recompensa adicionada - requisito adicional: deve ter diálogos de arquivos io de plataforma cruzada.
Jari Komppa
11
no sourceforge, pequenas caixas de diálogo de arquivos têm várias chamadas de funções modais. é um arquivo simples de plataforma cruzada C C ++ para adicionar ao seu projeto.
Tinyfiledialogs

Respostas:

33

Ainda não tentei, mas isso parece muito interessante:

librocket

EDIT: Como você precisará de um contexto para renderizar, eu recomendaria o SFML ou o SDL 1.3.

uggwar
fonte
de fato, parece interessante #
1825
2
Eu uso libRocket e é absolutamente maravilhoso! Dores de HTML estão presentes na biblioteca também, mas com algumas brincadeiras com ele, você dar a volta praticamente qualquer coisa: D
Grimshaw
Parece ter parado (sem atualizações por alguns anos). Além disso, navegar pelos documentos não oferece uma visão realmente boa de como é realmente. Os documentos geralmente são de nível muito baixo.
Jari Komppa
Nenhum pacote oficial para o Fedora ou Ubuntu (tanto quanto eu posso ver).
ilent2
Você também pode experimentar o GLFW para criar um contexto de renderização
19

A GUI do Crazy Eddie (CEGUI) é popular, e você pode criar um dos backend de renderizador existente ou escrever sua própria segmentação, independentemente da API suportada pelo OpenGL que desejar. É de código aberto, multiplataforma e C ++. No entanto, valoriza a consistência, o que nem sempre é um bom princípio de interface do usuário para jogos, que pode ter dezenas de controles personalizados usados ​​em exatamente um local.

Um padrão popular recente é a GUI de modo imediato (IMGUI) , que é como "nenhuma biblioteca de GUI". Tem vantagens e desvantagens - é muito simples, mas pode ser difícil de otimizar, e ainda tenho que ver realmente bons modelos IMGUI para controles avançados, como caixas de combinação ou exibições em árvore. Também não vejo uma boa implementação de um sistema de janelas IMGUI (e passo algum tempo tentando escrever um, com o qual nunca fiquei satisfeito) - ele é excelente para elementos HUD simples, no entanto, e controles simples e únicos.

Joe Wreschnig
fonte
2
Recentemente, tive minha primeira experiência com IMGUI e senti que era um grande passo para trás. Como você diz, é ótimo para um HUD simples ou uma barra de ferramentas estática, mas bastante horrível para qualquer coisa dinâmica, hostil a artistas ou designers criarem layouts, e o obriga a apresentar a apresentação e o código lógico em um só lugar.
Kylotan
11
-1. Tenho a sensação de que o CEGUI é popular apenas porque existe e as pessoas o mencionam como padrão (como este). Quando o usei, achei estranho e extremamente desajeitado.
bobobobo
@bobobobo Concordou. É popular porque existe. É o gui "oficial" para o ogro (o que quer que isso signifique), mas acho bastante complicado codificar. Além disso, o construtor de GUI da RAD é muito problemático (ainda em desenvolvimento).
Cheshirekow
11
O querido imgui parece ser um bom exemplo de como as IMGUIs podem ser versáteis. Ainda estou para experimentá-lo, mas parece bastante promissor.
precisa
13

Eu recentemente tropecei em Gwen . É uma biblioteca GUI escrita pelo autor do Gary's Mod. É licenciado pelo MIT como qualquer boa biblioteca de jogos deveria ser.
Gwen logo
A biblioteca tem várias coisas a seu favor.

  • Grande conjunto de widgets
    Gwen está em desenvolvimento há alguns anos e mostra isso.
  • Fácil personalização do renderizador de back-end
    Esse é um grande problema. A biblioteca vem com um renderizador OpenGL reconstruído. Mas criar um renderizador é simples o suficiente para que você queira criar um renderizador específico para o sistema de renderização do seu jogo.
  • Menos preenchimento de
    Gwen parece estar do lado mais leve das GUIs de jogos. Sem XML, sem renderizador HTML, apenas C ++ simples. Gwen também não vem com carregadores de imagens. Ele espera que o backend do renderizador lide com o carregamento. Eu gosto desse recurso, pois mantém a biblioteca pequena e o sistema de renderização do meu jogo já gerencia texturas.
  • Skinable
    Não é a primeira coisa em seus marcos, mas eventualmente você precisará personalizar sua GUI para o seu jogo.
  • Skin de C ++
    Não sou desenvolvedor web e acho difíceis as GUIs centradas em html css.
  • Injeção de entrada
    Isso é grande para jogos. É sempre difícil usar sistemas GUI que desejam possuir a pesquisa de entrada.
  • plataforma cruzada
    A biblioteca se esforça para ser plataforma cruzada, mas eles admitem que você pode encontrar problemas em plataformas menos usadas.
  • desenvolvido ativamente
    Além disso, é muito menor que o CEGUI ou MyGUI, portanto, hackear ou enviar patches é muito mais prático.

No entanto, aqui estão os contras:

  • Não há uma única página de documentação. Nem mais um site, apenas o repositório do github.
  • Os renderizadores empacotados não têm portabilidade, portanto, você precisará escrever o seu caso, caso precise.
  • ???
deft_code
fonte
2
Falta documentação, não é portátil (ainda), back-end do opengl inacabado, etc. Não foi possível descobrir nos materiais on-line se ele possui diálogos de arquivo io (ou diálogos, nesse caso).
Jari Komppa
Concordo que a documentação está faltando. A biblioteca principal é multiplataforma. No entanto, o renderizador e os sistemas de entrada estão ausentes para outras plataformas. Para mim, isso não é um problema, pois criei um renderizador personalizado para mim, sistema de renderização.
Deft_code
11
Não ter xaml / html / css não é uma vantagem, com certeza. É para isso que essas coisas foram feitas e o fazem muito melhor do que o C ++.
user441521
7

Desculpe a resposta tardia, mas você pode dar uma olhada em uma estrutura de interface do usuário OpenGL chamada GG . O GG foi desenvolvido como parte do projeto FreeOrion e está incluído no repositório SVN (e no SDK para download). Parece bastante capaz. Eu incluí uma captura de tela abaixo; você pode clicar na imagem para ver a versão completa.

Captura de tela da interface do usuário do FreeOrion baseada em GG

Mike Strobel
fonte
Parece que o GG foi movido para um gigi de projeto separado no sourceforge.
Deft_code 11/10/10
Não me surpreenderia. Eles intencionalmente o mantiveram dissociado do FreeOrion.
Mike Strobel
Passei uma noite inteira nele e ele realmente precisa de um arquivo do CMake. Gosto da aparência, não gosto do Boost.
2191111
O GG pode ser encontrado aqui: gigi.sourceforge.net
MichaelHouse
Boa sorte para conseguir isso sob as janelas.
3Dave
5

MyGUI é uma solução bastante boa para DirectX e OpenGL.

Ricket
fonte
4

Dê uma olhada no AntTweakBar , ele está sendo usado pelo Cinder . Há também uma nova biblioteca de GUI desenvolvida para o Cinder: SimpleGUI .

Se você deseja usar HTML + CSS, existe o Awesomium (usado pela Wolfire Games no jogo Overgrowth ) e uma alternativa gratuita chamada Berkelium .

Gregory Pakosz
fonte
AntTweakBar é incrível, mas bastante limitado. É ótimo para o que foi projetado - aprimorando valores e integração extremamente simples - mas não é útil como um kit de ferramentas de interface do usuário genérico.
Jari Komppa
3

Eu tenho mexido com QuickGUI e MyGUI . As duas bibliotecas da GUI do Ogre abandonaram recentemente o requisito do ogro. Ainda não tenho muita experiência com isso, mas parece que continuarei com o QuickGUI, pois é muito menor e mais simples.

Não tenho certeza se o wiki do QuickGUI foi atualizado ainda para apontar para a versão mais recente do Ogre-free. Aqui está a versão mais recente.

http://www.stormsonggames.com/downloads/QuickGUI_10_8.zip

O repositório viu algumas atualizações entre plataformas, então você estará melhor usando o svn diretamente.

http://stormsonggames.com/svn/SSE/Gaia2/QuickGUI
http://stormsonggames.com/svn/SSE/Gaia2/QuickGUIOgreDemo
http://stormsonggames.com/svn/SSE/Gaia2/QuickGUIOgrePlatform

Nome de usuário: Anonymous
Senha: QuickGUI

Por fim, aqui está o breve wiki sobre como adicionar diferentes backends de renderização. http://www.ogre3d.org/tikiwiki/QuickGUI+Integration+Tutorial

MyGUI parece ter mais recursos ao custo de ficar inchado. E honestamente, se a simplicidade não é um requisito, a CEGUI explode o MyGUI fora da água.

deft_code
fonte
Eu tentei o MyGUI e é realmente extremamente inchado, não o recomendo se você quiser economizar espaço. Ainda brincando para fazer o QuickGUI funcionar.
Cristina
11
Eu tentei os dois, usei o CEGUI por mais tempo, mas foi absolutamente horrível sem mencionar extremamente lento, com muito texto. Mudei para o MyGUI recentemente e está funcionando muito bem. Seus editores de layout e skin são muito, muito legais. Não tenho certeza sobre o inchaço, acho que o CEGUI está muito inchado em comparação. Algumas práticas do MyGUI são estranhas (por exemplo, operador + = para atribuir delegados e a transmissão é feita de maneira estranha também - os autores estão desenvolvendo-a ativamente e ouvindo sugestões excelentes), mas no geral prefiro CEGUI.
Samaursa
O operador @Samaursa + = significa que você pode adicionar mais de um delegado.
Ocelot
3

Eu recomendaria o QT, como é multiplataforma, C ++ e você pode obter uma versão de código aberto com a licença LGPL. Também é fácil de usar e possui muitos componentes pré-fabricados que você pode usar.

martiert
fonte
6
Não pense que é uma interface de usuário baseada em OpenGL.
DeadMG
Não diz que deveria ser baseado em OpenGL, ou estou entendendo a questão completamente? Eu li que ele não tem nada a ver com o freeGLUT, do qual o QT é mais do que capaz.
18711 martiert
Eu segundo isso! Eu uso o qt e ele tem quase tudo o que é necessário quando eles estão iniciando. Ao longo dos anos, tornou-se muito estável, com um bom apoio. Eles também têm uma estrutura para jogos chamados gluon.
18711 brainydexter
8
O problema com o QT e os frameworks em geral é que eles controlam o loop principal. Isso geralmente não se presta bem a jogos.
Deft_code
11
Se a interface do usuário não for OpenGL, recomendo que você se livre do loop principal, usando a interface do usuário baseada em eventos e eventos e cronômetros para os gráficos do jogo +. Enfim, eu usei o QT e não o recomendo.
Danny Varod
3

Os criadores podem me criticar por dizer isso, mas achei o GLFW simplesmente fantástico na criação de estruturas de GUI de plataforma cruzada. O pessoal de desenvolvimento do GLFW continua falando sobre o GLFW não trata da GUI. No entanto, ele faz um trabalho agradável, simples, limpo e totalmente portátil de lidar com gráficos, eventos e tarefas de mouse / teclado / joystick.

O bom do GLFW para mim é que ele é bastante pequeno, não requer código específico do sistema, nem GLUT e é bem mantido. Tem sido estável para uso em projetos OpenGL 4.1 até agora. Comparado a algo como SDL, eu amo a pequena sobrecarga e foi fácil como torta escrever classes de manipuladores GUI.

Como alternativa, dê uma olhada no FLTK . Pode ser usado para todo tipo de coisa e ser reutilizado de maneira muito simples. Ele é realmente usado na criação de aplicativos, mas é perfeitamente capaz de manipular objetos 3D e é construído no OpenGL. Muito pequeno, bem suportado e, embora eu não veja muitas pessoas fazendo interfaces personalizadas no nível de design do jogo, há algumas que parecem funcionar muito bem.

Garet Claborn
fonte
11
O glfw não é apenas uma biblioteca para abstrair o código de janelas em plataformas de desktop? Como você é capaz de criar gráficos com ele?
11
@GabrieleVierti, bem como eu disse, também lida com entrada acelerada entre plataformas. além disso, ajuda mais especificamente a obter um contexto OpenGL ou Vulkan de barebones e lida com grande parte do padrão. Com o contexto, apenas implementei uma pirâmide de histograma dos pontos de acesso sobre a tela e a usei como parte principal do manipulador de eventos click / type. então os controles se associam a algum lugar na pirâmide. comandos de desenho normais para definir os gráficos reais. qualquer kit de UI para o material web obras de domínio específico multa ou mais
Garet Claborn
Seria muito mais fácil simplesmente adicionar um quadro gui pré-fabricados (como querida ImGui)
11
O ImGui opera no modo imediato, para que você perca a aceleração do hardware. as coisas que mencionei que eu tinha que rastrear de qualquer maneira para a renderização do jogo, portanto, adicionar algumas sobreposições 2D não foi uma consideração importante. Eu posso ver como isso seria um aborrecimento para alguns projetos que
Garet Claborn