LWJGL, OPENGL... por onde começar?!

Olá,

Estou começando meus estudos para criação de jogos. Bem, depois de pesquisar ferramentas, frameworks e milhares de outros utilitários resolvi focar em LWJGL pois parece que melhor atende meus objetivos. Isso não é uma discussão sobre qual a melhor linguagem para criação de jogos, mas por motivos que convém aos meus projetos optei pelo Java. Depois de verificar as etapas para construção de um jogo esbarrei na parte gráfica, daí então me surgiu dúvidas. O que é realmente a LWJGL e quais as relações com OPENGL? É necessário aprender OPENGL primeiro? Por onde começar? Bom, quaisquer outras dúvidas que possam surgir nessa empreitada é bem vinda uma orientação desde já.

Um bom lugar: http://www.codemansion.com/p/opengl-superbible-in-java-using-lwjgl.html

OpenGL é uma biblioteca gráfica opensource escrita em linguagem c. As empresas como Nvidia e Amd a usam porque essa especificação não é dependente de plataforma. Por exemplo, quando uma placa aceleradora é lançada com novos recursos, a opengl é atualizada para suportá-los. Isso garante que um programa irá rodar em vários hardwares diferentes.

[quote=Wiki]What is OpenGL?
OpenGL stands for Open Graphics Library. It is a specification of an API for rendering graphics, usually in 3D. OpenGL implementations are libraries that implement the API defined by the specification.
Graphics cards usually have an OpenGL implementation. Because the OpenGL specification is not platform-specific, it is possible to write an application that will be possible to use against many different types of graphics cards. It also increases the chance that the application will continue to work when new hardware will become available.[/quote]

http://www.opengl.org/
http://www.opengl.org/wiki/Getting_started
http://www.opengl.org/wiki/FAQ

Sobre a parte de aprender a usar opengl. Depende da biblioteca ou framework. Todos eles são desenvolvidos em cima da opengl. Alguns abstraem completamente a opengl enquanto outros não.

Se for para desenvolver jogos, é interessante usar uma engine pronta. Agora se for para desenvolver ferramentas gráficas(vídeo players, dvrs, editores de imagem e foto, etc…) saber opengl é essencial.

LWJGL é sómente um mapeamento em cima da opengl. Isso para que você a possa usar com linguagem java.

LWJGL é o que chamamos de binding.

É um conjunto de dlls e libs escritas em JNI, que permitem que você interopere a opengl com o Java.

Esteja atento que LWJGL não é Java. Portanto, terá que instala-lo na máquina do seu usuário, assim como instala a JVM. E também deve certificar-se que existe uma distribuição LWJGL na plataforma que estiver objetivando.

No fundo, ele te entregará um monte de funções estáticas, idênticas as que você teria em C. Além disso, ele tem alguns facilitadores, como uma forma fácil de carregar texturas na forma de uma BufferedImage. No mais, a sintaxe dos dois é tão idêntica, que você poderia aprender OpenGL seguindo os tutoriais em C do Ponto V:
http://pontov.com.br/site/opengl

Esses tutoriais ainda tratam do pipeline fixo, estou planejando fazer outra série com o programável em breve. Mas o pipeline fixo é interessante do ponto de vista didático.

Embora não seja uma discussão sobre qual plataforma é a melhor para jogos, gosto sempre de frisar que optando por Java você escolheu uma das piores. O número de plataformas suportadas é minúsculo (e as que suporta são pouco interessantes), não há apoio por parte da Oracle, a comunidade de games é minúscula e há pouquíssimas libs realmente de peso (tanto nativas, quanto portadas). Mesmo games tipicamente feitos em Java, como o Minecraft, tiveram que ser reescritos quando mudaram de plataforma (ele foi refeito em Objective-C, por exemplo, para rodar no IOS). A falta de alguns recursos, especialmente sobrecarga de operadores, torna o trabalho de fazer jogos 3D um tanto penoso.

Se for só para fins de estudo, o java é uma linguagem aceitável. Mas provavelmente você teria uma experiência mais produtiva e prazerosa se optasse pelo concorrente, o C# com XNA, ou mesmo uma engine, como a Unity ou UDK. Quanto ao papo de que o XNA não será suportado no Windows 8, sim, é verdade. Porém, o DirectX 11.1 tem sintaxe similar e pode ser programado em C#. Ou seja, ela deixa de existir como lib, para passar a parte do SDK nativo.

[quote=ViniGodoy]

Ou seja, ela deixa de existir como lib, para passar a parte do SDK nativo.[/quote]

Na verdade ele vai voltar de onde saiu. Teve uma época que o XNA fazia parte do SDK directx.

O directshow por exemplo fazia parte do sdk directx, mas o moveram para o windows sdk, junto com ddk.