Game Engine em Java com OpenGL

Olá pessoal do GUJ, vim apresentar algo que estou trabalhando, se trata de uma GameEngine 3D em Java usando LWJGL 3. (OpenGL e GLFW).

Ainda estou estudando programação gráfica mas estou pegando o jeito da coisa e até fiz coisas interessantes já nesse projeto.

Vou deixar o link no final da mensagem para a página do Bitbucket, estou montando uma wiki lá, a engine ta com a documentação razoavél e ontem mesmo alcançei uma “milestone” e lancei a versão 1.0. Sem binários ainda, para testar só rodando a classe de teste pela IDE.

O projeto utiliza Maven e está integrado com a CI do Codeship (muito boa por sinal). No README.md do projeto vocês podem encontrar mais informações.

Segue a página do projeto: https://bitbucket.org/innovationbrasil/aegis-engine.

Aceito dicas de como posso melhorar coisas nesse código e outros meios de aumentar a eficiencia do OpenGL :3

Abraços.

Acho que ajudaria se você postasse mais conteúdo, no mínimo screenshots da engine rodando.

Se está na 1.0, é possível fazer um jogo nela? Seria bom ter um howto de como instalar e configurar a engine, quais ferramentas necessárias, e como fazer um jogo simples (um pong, por exemplo).

Abraço.

1 curtida

hehe Olá @TerraSkilll. Esta na 1.0 mas é do Beta do Beta kkkkk está muito no início. “1.0-SNAPSHOT” seria algo mais aceitável.

Bom, posso postar screenshots de umas features que já está pronta. Porém agora no momento desta postagem estou com um pouco de pressa entao vai ficar pra mais tarde, e obrigado por sempre aparecer nos meus posts :3

Ela não está pronta para uso comercial e acho que nem pessoal kkkk ainda falta implementar MUUUUUUUUUITA coisa.

Atualmente a Engine consegue carregar modelos simples, com texturas e os shaders por enquanto só conseguem fazer blending com cores. Usando uma array de cores que é ligada na VAO do objeto.

A classe EngineTester se você ver no repositório tem algumas arrays lá. Claro que ter arrays escritas na braba (ou em arquivos externos) é inviavel e já estou tratando de criar um carregador de modelos do blender (.obj ou wavefront object). Mas antes de criar este carregador de objetos eu preciso primeiro implementar luz, já que os arquivos .obj vem com informações das “normals” (dados que cada vertice possui que vai ser usada pra cálculo de iluminação).

Pelo que entendi, você está “estudando enquanto faz”. Isso não é necessariamente ruim, mas te deixa muito aberto à muitas possibilidades.

Se pretende realmente criar uma engine (mesmo que simples), eu sugiro fazer um roadmap de funcionalidades, por ordem de necessidade do recurso, e trabalhar com base nesse roadmap. Por exemplo, que funcionalidade a engine precisaria ter para permitir criar um pong? Matrizes, desenhar cubos e input via teclado, mas ter suporte à modelos do Blender não é um requisito para isso. Faça um roadmap baseado nisso (ex: a versão 0.1 terá suporte a X e Y, a versão 0.2 terá suporte a Z e W.

Para começar, crie funções que gerem formas básicas, como planos, cubos e esferas, mesmo que sem texturas. Assim, se você quiser focar em algo (ex: testar iluminação), terá uma base para criar uma cena e testar isso.

Edit: acabo entrando em quase todos os tópicos sobre jogos e engines, por isso parei aqui. :blush:

Abraço.

Cara, obrigado pelas dicas, mas eu já fiz implementações de para criação do espaço 3D, já que a engine vai ser focada em 3D.

Já tenho a muito tempo suporte a matrizes, formas de gerenciar buffers, aliais ante-ontem eu terminei um Batch Renderer pra reduzir o tempo de renderização de objetos em massa (6000 cubos com textura, junto com o Luz e luz especular, renderizou em 8ms e como tem vsync ficou cravado em 60fps).

Os 6000 cubos foram gerados usando posições e rotações iniciais aleatorias. Tudo funcionando perfeitamente :smiley:

Você manja de game dev você tem algum conhecimento que possa me ajudar? Exemplo, eu criei um branch para implementar OpenAL separadamente (e sinceramente to apanhando pro OpenAL).

Opa, o que quiz dizer não foi simplesmente ter essas funcionalidades, mas torná-las facilmente usáveis por quem for usar sua engine. Por exemplo, criar uma função que permita adicionar um cubo à cena numa posição X/Y e de escala Z com um comando só. Similar ao Instantiate da Unity. Ou mesmo uma cena que permita a inserção dinâmica de objetos simples, via arrastar e soltar por exemplo. Assim, quem pretender usar sua engine, poderá criar formas básicas, o que permite prototipagem rápida.

Minha especialidade não é muito programação 3D e da parte matemática da coisa. Eu puxo um pouco mais pro lado de Game Design. Por isso minha sugestões são voltadas à quem vai usar sua engine.

Se você produzir alguma documentação simples de como baixar a engine, configurá-la e rodá-la, posso dar uma olhada e sugerir outras coisas.

Abraço.

Okay, em breve vou produzir uma release estável bem documentada. Fique no aguardo :3