GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

JOGL - Por onde começar? [ RESOLVIDO ]

Olá! Cá estou eu de volta.

Alguém saberia me dizer onde há um tutorial simples sobre JOGL que mostre como estruturar a engine do jogo?

A maioria dos tutoriais que encontrei ou vão logo de cara assumindo que você possui Ph.D em Desenvolvimento de Jogos ou simplesmente falam como fazer coisas isoladas a la “o importante é funcionar :+1:” .

Mas, estruturando melhor a questão…

Eu construí uma engine em Java aplicando um pouco de ALGA junto dos recursos já oferecidos nativamente, no entanto, entendo que se quero dar profundidade aos estudos preciso aprender OpenGL (JOGL para Java no caso). O que não consigo entender é se JOGL só dispõe de suporte à exploração da GPU ou se dá a base da estruturação do jogo como: organização das cenas, orientação dos sólidos no espaço (localização, escala e rotação), câmera, physics, etc.

Observação: Não tenho interesse em aprender engines prontas (LWJGL), tampouco Unity e Unreal, pois meu foco é entender como um jogo funciona em seu núcleo, organização estrutural quando em conjunto de uma API gráfica (OpenGL, DirectX, Vulkan).

Para que tenham uma idéia do que quero desenlvolver com a API, está aqui o link para minha engine (e exemplo de um jogo que fiz para um trabalho da faculdade usando ela que está incompleto infelizmente):

Desde já agradeço.

EDIT : Atualizei o repositório com a última versão da engine e com o jogo junto.

Primeiro, LWJGL não é uma engine pronta, muito pelo contrário.

O que difere LWJGL do JOGL é que enquanto a JOGL oferece binding apenas para OpenGL e EGL, o LWJGL possui dentro de uma única biblioteca, bindings para OpenGL, OpenGL ES, Vulkan, OpenAL, etc…

Ou seja, com qualquer uma das duas vc estaria tão baixo nível quanto vc deseja. A LWJGL pra mim é mais atrativa.

Todas essas coisas que vc mencionou (cenas, escala, rotação, etc) não passam de abstração, sendo assim, vc pode implementar todos estes conceitos usando qualquer biblioteca que te dê acesso a coisas como desenhos em espaços 3D e isso inclui a JOGL.

Embora Java seja uma linguagem que facilita bastante o trabalho do desenvolvedor, eu achei dificil encontrar pra ela o tipo de material que vc está procurando.

OpenGL é a base do negócio e os melhores tutoriais que achei são esses:

No primeiro link vc vai usar como gerenciador de contexto a biblioteca GLFW (LWJGL usa ela por debaixo dos panos). O segundo link também oferece instruções para usar GLFW, mas também mostra como usar bibliotecas mais robustas como SDL e SFML.

GLFW e SDL são bibliotecas escritas em C e podem ser usadas normalmente com C++. SFML é escrita em C++ e possui bindings pra C.

A minha indicação é que vc aprenda a usar OpenGL usando C ou C++ e GLFW e só depois parta para LWJGL ou JOGL, a menos que vc encontre um tutorial em Java tão bom quanto aqueles que eu indiquei em C.

Se vc olhar o primeiro tutorial indicado, verá que ele é bem completinho, vai desde a criação do primeiro triangula, passa por texturas, transformações (que inclui sua duvida sobre posição, escala e rotação), mostra o conceito de camera e segue até conceitos avançados de iluminação.

1 Curtida

EDIT: Atualizei o repositório com a última versão da engine e com o jogo junto.

Eu já havia explorado um pouco a SDL no C++.

O caso é que preciso entender se essas abstrações já citadas já vem pré-prontas ou não. Eu consigo criar estruturas de classes para lidar com a renderização de polígonos, com suas transformações e etc, além da organização de leveis e cenas mas quero saber também se preciso fazer tudo isso, pois se já houver algo pronto na API, não faz sentido em eu gastar meu tempo com isso como fiz na minha engine, mas se preciso o farei.

É mais para entender até onde vai a abstração da API OpenGL em si do que necessariamente a JOGL, apesar de ir desenvolver em Java.

NOTA: Eu vou esperar mais respostas para decidir a qual a melhor solução. De qualquer forma obrigado.

Vc vai ter que reimplementar a parte da renderização, o que inclui transformações e o conceito de camera.

Também vai ter que implementar seu proprio gerenciador de cenas, mas é possivel que vc consiga reaproveitar aquele que vc fez pra sua primeira engine.

Talvez vc se interesse por LibGDX, é um framework e como tal, já tem varias coisas implementadas como diversos tipos de cameras, formas de gerencias as cenas, gerenciador de entidades, entre outras coisas.

1 Curtida

Caramba, dei uma pesquisada aqui e vi que você tem razão sobre o LWJGL. Eu havia me confundido achando que a licença dele exigia royaltie ou algo assim, também por isso não me interessei. Mas agora que vi que a licença é MIT (eu acho pelas características da licença) vou dar uma estudada nele. Principalmente depois do que você disse.

Muito obrigado!

1 Curtida
//