Quais são alguns bons recursos de aprendizado para o OpenGL? [fechadas]

88

Estou usando o OpenGL ES no iPhone há um tempo e, basicamente, me sinto muito perdido fora do pequeno conjunto de comandos que já vi em exemplos e adotei como meu. Eu adoraria usar o OpenGL em outras plataformas e ter uma boa compreensão dele.

Toda vez que procuro um livro, encontro essas Bíblias ENORME que parecem desinteressantes e muito difíceis para um iniciante. Se eu tivesse alguns fins de semana para aprender OpenGL, qual seria a melhor maneira de gastar meu tempo (e dinheiro)?

DFectuoso
fonte
12
Eu odeio dizer isso, mas o OpenGL Superbible ou o OpenGL redbook são a melhor maneira de aprender o OpenGL. Como é um assunto complexo, o livro precisa ser grande.
Rachel Blum
6
É acessível mesmo para um novato?
DFectuoso

Respostas:

36

Tenha cuidado ao olhar para os tutoriais do OpenGL, porque muitos deles (NeHe) incluídos apenas ensinam coisas que você não deve mais fazer. Hoje o OpenGL é um animal diferente do que era há 10 anos.

Alguns bons exemplos para evitar as coisas obsoletas podem ser encontrados aqui: http://www.g-truc.net/post-tech-content-sample.html

O OpenGL Samples Pack 4.0.1.0 é uma atualização que eleva o número de amostras para um total de 58 amostras; incluindo 13 amostras de OpenGL 4, 33 amostras de OpenGL 3.3 e 12 amostras de OpenGL 2 para Visual Studio 2008 e 2010 em 32 e 64 bits.

NocturnDragon
fonte
Está ligando a uma montanha!
user14170
65

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 discardalterar 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.

Nicol Bolas
fonte
1
Acabei de começar a ler seu livro / código-fonte, e é incrível .. muito obrigado por liberar isso de graça!
Alex Coplan
Embora eu seja um cara de telecomunicações, estava simplesmente dando uma chance aos seus tutoriais. E eles são muito legais para um novato. A única coisa é que, o opengl sdk não oficial não pode ser compilado corretamente com o Ubuntu12.04 + Eclipse. Existe alguma maneira, pela qual podemos instalá-lo diretamente (como fazemos para GL, GLEW, GLU, escassez etc.)?
iammilind
@iammilind: " não é propriamente montável " Como a compilação falha? Além disso, não há "instalação"; isso é metade do ponto. É um mecanismo de copiar / pré-criar / executar sem instalações de sistema, dependências, PPMs ou qualquer outra coisa que eu não entenda ou tenha alguma idéia de como usar no Linux. Você o coloca onde deseja, não para onde seu sistema pensa que deveria ir.
Nicol Bolas
1
Infelizmente, no Ubuntu, o processo de compilação falha no preamakepróprio estágio :( ... Será de grande ajuda, se no seu tempo livre você puder tentar executar seus tutoriais de código com o Ubuntu + Eclipse. Por enquanto, do outro lado, estou seguindo é usar o material de leitura que você forneceu e relacionando isso com alguns outros tutoriais de código a razão é que eu já vi "arcsynthesis" o melhor lugar para na web até agora para a aprendizagem novato OpenGL..
iammilind
@iammilind: Notei que você não registrou um relatório de erro. Como você espera que essas coisas sejam corrigidas sem uma?
Nicol Bolas
8

Meu único livro no OpenGL é "OpenGL SuperBible, 4th edition" e o quinto está prestes a ser lançado em algumas semanas. Eu acho que é bom para programadores iniciantes e avançados.

Editar: devo acrescentar que não vá para as últimas tendências tecnológicas, se você está apenas aprendendo a programar. As chances são de que você se torne um especialista usando uma metodologia, 5 novas interfaces / versões recém-lançadas. Vimos shaders avançar a cada 3 meses, ao que parece. Portanto, escolha a melhor documentação (geralmente primitiva), faça alguns programas e avance gradualmente, pois é mais provável que você encontre códigos mais antigos no futuro. Espero que ajude!

Phil
fonte
Estou passando pelo soberbo agora e é realmente bom para pessoas que não têm formação gráfica, pois explica todos os conceitos à medida que avança.
Spidey
5

Como sempre, a melhor maneira de aprender é fazê-lo. Eu gostaria de gastar dinheiro, a menos que você sinta que realmente se beneficia de ter um livro para ler, a maioria das informações (se não todas) pode ser encontrada online. Além de aprender o OpenGL, você também pode querer atualizar sua Álgebra Linear, isso nunca é demais.

O grande problema que enfrentei é que muitas coisas que estão por aí foram privadas na versão recente do OpenGL.

O melhor recurso que encontrei foi no Joe's Blog . É melhor apresentar o pipeline moderno e mostrar alguns exemplos de maneira mais legível do que o que encontrei em outros lugares. Parece que Nehe está atualizando um par recentemente e, embora suas lições ainda sejam antigas, algumas das notícias podem ser interessantes. Lazy Foo ' também foi um ótimo recurso, mas como Nehe, os tutoriais usam material obsoleto.

Acho que depois de um fim de semana ou 2, quando você se sentir confortável, faça um pequeno projeto para aplicar tudo. Breakout, ou tetris - algo em que você pode se concentrar no próprio código. Você aprende muito mais quando sai e tenta fazer um projeto real, independentemente de quão simples.

cmjreyes
fonte
3

A melhor maneira de aprender o OpenGL é usá-lo. Eu recomendaria escrever seu próprio mecanismo. Isso pode parecer uma tarefa assustadora, e é. Seu primeiro motor não será muito bom, mas você aprenderá muito.

Basicamente: escreva um mecanismo, use-o para um jogo, descubra o que você não gosta e reescreva-o. Continue fazendo isso e você ficará melhor no OpenGL. :)

O que você vai precisar:

  • Alguma maneira de carregar modelos (.obj)
  • Alguma maneira de carregar texturas
  • Iluminação, no pipeline de função fixa ou em um shader
  • Para cenas um pouco mais complexas que um bule de chá na tela, um gráfico de cena
  • Muitas ferramentas minúsculas (aula de vetor 3d, aula de quaternion, aula de câmera, gerenciador de cena etc.)

Isso já é muito trabalho.

knight666
fonte
Você poderia me indicar alguma documentação sobre a arquitetura básica ou os componentes que um "primeiro mecanismo" deveria ter? Isso realmente pode parecer uma boa maneira de começar minhas mãos sujas com gl aberto ...
DFectuoso
4
-1 Os mecanismos de escrita como uma maneira de entrar no gamedev não são muito bons. Você não sabe o que colocar no mecanismo, por exemplo. scientificninja.com/blog/write-games-not-engines
O pato comunista
@TheCommunistDuck SADLY, scientificninja não existe mais. Link web.archive
bobobobo 23/03
2

Eu aprendi o OpenGL escrevendo um jogo "simples": 3D Tetris !

Tente criar seu próprio jogo / aplicativo simples:

  • Asteroids
  • Pong
  • Scroller lateral simples (você pode aprender a carregar modelos para o jogador / inimigos. Não possui nenhum? Use modelos Quake)
  • Gerador de terreno 3d

Faça algo simples que lhe interessa!

Bryan Denny
fonte
2

Fazemos alguns OpenGL (ES) no jogo Craps do Orchard para o iPhone, mas ele foi tratado por um programador com habilidades 3D loucas. Então, por causa disso, tenho aprendido OpenGL (ES) para saber do que estou falando e para poder codificar junto com a equipe.

Um site que achei útil, com uma série de tutoriais, é o blog de Jeff LaMarche: http://iphonedevelopment.blogspot.com e aqui está um link para suas postagens no OpenGL: http://iphonedevelopment.blogspot.com/2009/05/ opengl-es-from-ground-up-table-of.html

E a partir do OpenGL.org, existem dois links úteis: http://www.opengl.org/code/ e http://www.opengl.org/resources/features/

A melhor maneira, foi afirmado acima várias vezes. Entre e faça algo pequeno, interessante, e continue subindo. É tudo sobre entender a cena, a câmera e os materiais (shaders). Depois de entender esses conceitos, você pode começar a analisar os mecanismos físicos, a detecção de colisões, os efeitos das partículas e coisas do gênero. Woot! (^_^)

Boa sorte com todos os seus esforços, Kevin

Kevin Bomberry
fonte
2

Bem, ninguém falou sobre o Guia de Programação OpenGL , eu não tenho essa edição em particular, mas as mais antigas eram muito boas.

Frédérick Imbeault
fonte
1
Conte-me mais, por favor. Eu me pergunto como isso é melhor / diferente da super bíblia e se vale a pena o tempo que vale a pena ler livros tão grandes (sem ofensa, mas se levar mais de 20 horas para ler um livro, eu quero ter certeza de que vale a pena =))
DFectuoso
2

http://www.opengl-tutorial.org/

Possui tutoriais para o OpenGL 'moderno' (núcleo 3.0 / 4.0, por exemplo, nada de obsoleto (como glBegin / glEnd) é ensinado). Embora os tutoriais usem shaders, o básico é explicado em detalhes, construindo uma base matemática sólida ao longo do caminho. O texto é arredondado com exemplos de código * e visualizações úteis.

Os tutoriais intermediários abrangem coisas como, por exemplo, o uso de Quaternions ou Lightmaps .

. * glm é usado como uma biblioteca de matemática

Exilyth
fonte
1

Apenas observe que a melhor maneira de aprender o OpenGL é orientada a tarefas . Tente fazer algo (como adicionar um recurso ao seu jogo) e procure o que é necessário para fazer isso .

Manuais e tutoriais são realmente chatos sem um contexto maior - isto é, algo além do tutorial que você deseja alcançar sozinho.

bobobobo
fonte
-1

Comece com NeHe para obter rapidamente o seu primeiro triângulo na tela. Faça alguns dos tutoriais para iniciantes lá para entender os conceitos básicos da programação 3D. Se, como você sugere, mencionando o OpenGL ES, você já conhece o básico da programação 3D (o que são matrizes, para que são usadas, como diferentes matrizes são usadas para projetar vértices na tela, o que são vértices etc.), então sugiro que você não perca tempo com o NeHe, porque isso pode atrasá-lo (ensinando coisas que você precisa "desaprender" mais tarde).

Além disso, concordo que a melhor maneira de aprender é fazendo. Um bom primeiro projeto não-hello-world pode ser um jogo 2D (ou um mecanismo de jogo 2D). O uso moderno de aplicativos OpenGL para 2D pode ensinar muitos conceitos relevantes (uso de buffer e shader, por exemplo), e será menos assustador do que um projeto 3D. Depois, você pode aplicar o que aprendeu ao fazer um aplicativo 3D.

Janis Kirsteins
fonte
NeHe está desatualizado. Além disso, embora a criação de arte seja mais fácil e você esteja lidando principalmente com quads texturizados, existem muitos casos de canto (por exemplo, produto cruzado de vetor) que tornam a escrita de um jogo em 2D antes de ser mais difícil. Jogos com gráficos 3D mas jogabilidade 2D (por exemplo, Pong, Breakout, ...) podem ser mais fáceis do que jogos 2D / 3D puros.
Exilyth 23/03
-4

Bem, me disseram repetidas vezes que os tutoriais da nehe são os melhores, acho que eles se encaixam para você também! http://nehe.gamedev.net/ Comprei o livro vermelho ...

gokoon
fonte
Parece um divertido conjunto de pequenos pedaços de zero a um ótimo lugar, obrigado!
DFectuoso
2
Eu tenho que discordar totalmente. Sim, os tutoriais da NeHe existem há muito tempo, mas nunca tiveram um estilo muito bom e estão desatualizados.
Andreas
8
-1 Nehe está muito desatualizado.
Axel Gneiting
7
-1. Aprendeu todos os tipos de coisas ruins com nehe!
Gabriel Isenberg
-1. NeHe deve rotular seus tutoriais como obsoletos e desatualizados.
Quazi Irfan 15/01/12