Você pode aprender muitas coisas. Aqui está o meu pensamento sobre cada um, da perspectiva de alguém novo no OpenGL.
Exemplos de OpenGL
Há muitos exemplos de códigos por aí que você pode ler. Os exemplos do G-truc são bastante extensos e abrangem muitos recursos avançados.
No entanto, se você é iniciante , aprender com os exemplos é uma maneira terrível de aprender. Ler código que você realmente não entende não vai lhe ensinar por que ele funciona. De fato, o texto na página vinculada acima especifica, com razão, que os exemplos não são para iniciantes.
Aprender com o código-fonte simples, a menos que seja muito comentado (nesse ponto, é um tutorial), não é uma coisa fácil. Tentar fazer isso incentiva a programação no estilo cult de carga e a codificação de copiar e colar. É muito fácil se convencer de que você entende como algo funciona quando tudo o que você está realmente fazendo é apenas copiar o código de um lugar para outro. Você pode misturar e combinar as coisas, mas é difícil alcançar um entendimento verdadeiro sem o material instrucional adequado.
Livros OpenGL
Há um número razoável de livros compráveis reais para o desenvolvimento do OpenGL. Vou cobrir meus pensamentos sobre os dois maiores aqui.
OpenGL Redbook
Este é um tanto problemático do ponto de vista puramente prático. Veja, a 7ª edição abrange GL 3.0 e 3.1. O que é bastante antigo. Houve um monte de recursos úteis adicionados ao OpenGL desde então, características que mudam a forma como você escreveria coisas. E nem todos eles são recursos de hardware.
A 8ª edição está chegando "em breve" e abordará o 4.1. Não se sabe se ele cobre coisas antigas de função fixa.
Eu diria que este livro está bom. O maior problema com isso é a organização da informação. É mais um manual de referência abrangente do que um livro feito para aprender. Aqui está o que eu quero dizer.
Uma das coisas mais importantes que se deve fazer ao ensinar é não sobrecarregar o aluno com informações sem importância. Mas o Redbook faz exatamente isso. Ao introduzir o material, ele introduz muito material. Muito disso é supérfluo para a tarefa em questão.
O que você fala e quando fala sobre isso é crucial para tornar seu livro um bom recurso de aprendizado. O Redbook nunca retém informações até um momento mais apropriado. Quando fala sobre como desenhar triângulos e primitivas, fala sobre tudo sobre desenhá-los, tudo de uma vez. Abrange todas as opções, funções, parâmetros, etc.
Isso simplesmente não é uma boa organização de informações.
OpenGL Superbible
A quinta edição deste livro cobre apenas o GL 3.x principal, portanto, nenhuma função fixa.
No entanto, a organização geral do livro é mais ou menos idêntica à organização da quarta edição. Isso parece impossível, pois a 4ª edição usava função fixa e não introduziu shaders até muito mais tarde.
A maneira como isso foi realizado é a minha queixa nº 1 sobre o livro. Essencialmente, o autor construiu uma biblioteca que implementa uma forma de função fixa OpenGL. Ele envolve VAOs, objetos de buffer, shaders e várias outras coisas, para que ele possa desenhar objetos, matemática matricial e texturas sem precisar falar sobre coisas como o pipeline GL funciona em detalhes.
Ao ocultar todos esses detalhes, facilita a digestão do material. Mas você sempre verá pessoas se afastando da Superbible sem saber como realmente funciona sem a biblioteca. Eles realmente não entendem como os shaders se conectam a objetos de buffer, como os dados fluem pelo pipeline, etc.
É um livro útil, mais do que o Redbook. Se tudo mais falhar, ele fará o trabalho. Mas acho que poderia ser melhor.
Além disso, de acordo com alguns revisores, parece que algumas informações são perdidas, como empacotar dados de atributos usando valores normalizados e outros.
Materiais Online do OpenGL
Existem muitos materiais on-line que você pode aprender.
Tutoriais de NeHe
Os tutoriais de NeHe , como outros já declararam, estão extremamente desatualizados. Eles se concentram no OpenGL de função fixa. Costuma-se afirmar que é fácil aprender GL de função fixa, o que é verdade. Mas isso não faz uma boa ideia.
É difícil entender como o pipeline de função fixa realmente funciona. Eu chegaria ao ponto de dizer que é mais difícil do que aprender shaders. Depois de obtê-lo, os shaders são simples. Compreender os meandros do material do ambiente de textura, combinadores e outros enfeites, é muito complicado e requer visitas frequentes a documentos de referência para garantir que tudo esteja configurado corretamente. Mesmo se você entender tudo corretamente, é fácil cometer um pequeno erro que faz com que tudo quebre.
A diferença é que você pode fazer a função fixa funcionar sem entendê-la. Isso incentiva a programação do culto à carga. Torna possível obter algo na tela sem realmente saber o que se está fazendo. Nos fóruns do OpenGL.org, vemos perguntas constantemente sobre minúcias relacionadas à função fixa, desde pessoas que não sabem como o gluLookAt funciona, dificuldades com a iluminação, até pessoas tentando obter algum efeito específico para trabalhar com o ambiente de textura.
Portanto, não, acho que o NeHe não é uma boa maneira de aprender o OpenGL.
O comentário acima pode ser usado para qualquer tutorial não baseado em shader, como Swiftless , Lighthouse etc.
Programação OpenGL do Wikibook
O Wikibook OpenGL Programming é provavelmente o equivalente moderno ao NeHe. Ele abrange a versão 2.1 do GL, porque eles querem mantê-lo relevante para plataformas móveis. Se isso é importante para você, então procure aqui.
O outro problema do NeHe, e, portanto, deste Wikibook, é o grande foco no código fonte. A proporção de texto para código é muito pequena; existe muito código, mas o texto não explica realmente como tudo funciona.
Como um exemplo, veja a parte inferior do Tutorial 2. Ele apresenta a mistura. Não diz como funciona a mistura. Não diz o que glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
realmente significa ou faz. Apenas diz: "Aqui está um código que torna as coisas transparentes".
Esse não é o melhor ambiente de aprendizado.
Tutoriais incompletos
Swiftless tem um conjunto de tutoriais 4.x OpenGL . O Durian Software também possui alguns tutoriais OpenGL baseados em shader . E há os tutoriais "OpenGLBook.com" .
O que todos têm em comum é ... que estão incompletos e abandonados. Todos eles receberam cerca de 4-5 tutoriais e foram descartados. Nenhum deles alcançou texturização, iluminação ou algo assim. Bem, Durian atingiu texturas, mas não iluminação.
Muito pode ser obtido com eles, mas também falta muito.
Autopromoção desavergonhada
Revisar meus próprios tutoriais de Modern 3D Graphics seria um terrível conflito de interesses. Então, em vez disso, vou me aprofundar na organização por trás deles e por que acho que eles são bons.
Ah, sim, estou trabalhando no Tutorial 17. O projeto não está morto.
Os três primeiros capítulos são realmente sobre como funciona o pipeline do OpenGL. O Superbible falhou porque tentou ocultar detalhes. Em vez disso, tento explicar esses detalhes muito, muito bem. Repetidamente. A introdução explica o pipeline em texto simples. O primeiro tutorial explica com acompanhamento de código. E o segundo tutorial o visita ainda mais.
A partir daí, passo naturalmente para o posicionamento de objetos. Isso introduz uniformes, mas eu não queria colocar uniformes e projeção em perspectiva ao mesmo tempo. Então eu separei os dois conceitos. Após a projeção, o buffer de profundidade parecia um próximo passo razoável, seguido de como as transformações e matrizes funcionam. Depois disso, câmeras. A rotação com quaternions foi um acréscimo tardio, mas acho que era algo importante para o programador de gráficos em desenvolvimento.
Os tutoriais de iluminação novamente constroem um sobre o outro. Iluminação difusa, depois por fragmento e depois especular. A faixa dinâmica foi uma escolha interessante. A maioria dos materiais introdutórios tenta ficar longe disso, mas eu o aceito. Hoje em dia, você não é programador gráfico se pensa que a intensidade da luz está sempre no intervalo [0, 1]. E você não é um programador gráfico atualmente, se não sabe como manter um pipeline de cores linear.
O último em iluminação, sobre impostores, foi estranho. Tento criar tutoriais que resolvam problemas, em vez de apenas mostrar algumas funções do OpenGL, principalmente à medida que o livro continua. Grande parte do meu design de tutorial vem de encontrar maneiras de falar sobre certos tópicos e ainda torná-los problemas reais e não óbvios: "estamos aprendendo o X agora". Os shaders de geometria são difíceis, porque realmente não resolvem muitos problemas.
Os impostores representavam um problema que os GS eram realmente úteis para resolver. Além disso, permitiu-me falar sobre outras coisas menos usadas, como discard
alterar a profundidade de um fragmento. E isso realmente mostra o poder dos shaders: você pode transformar um quadrado plano em uma esfera.
Os tutoriais de texturização também são interessantes. Uma das razões pelas quais adiei a falar sobre texturas de cores difusas até a terceira foi adiar a conversa sobre texturas sRGB por um tempo. Dessa forma, eu poderia falar sobre os problemas básicos de texturas (carregar dados, colocá-los em shaders, filtrar, fixar etc.) sem precisar lidar com problemas lineares. Então, eu poderia passar um tutorial inteiro sobre esse tópico. Isso me permitiu enfatizar realmente a importância de manter um pipeline de cores linear.
É um dos meus animais de estimação.