Bons recursos para aprender o OpenGL moderno (3.0 ou posterior)? [fechadas]

73

Eu tropeço na busca de um bom recurso para começar com o OpenGL (3.0 ou posterior). Encontrei muitos livros, mas nenhum deles pode ser considerado um bom recurso!

Aqui estão dois exemplos:

Guia de programação do OpenGL (7ª edição) http://www.amazon.com/exec/obidos/ASIN/0321552628/khongrou-20 Este é o material completo que está obsoleto! Quase todos os capítulos começam com uma nota sobre isso.

OpenGL Superbible (5th Edition) http://www.amazon.com/exec/obidos/ASIN/0321712617/khongrou-20 Este livro usa uma biblioteca criada pelo autor para explicar os principais argumentos, ocultando o que você deseja aprender! Não quero aprender a usar sua biblioteca! Eu quero aprender OpenGL!

Espero que você entenda que essa não é a mesma pergunta como "ei, não sou capaz de usar o Google ... me diga como aprender OpenGL". Acabei de concluir uma pesquisa completa e profunda, mas não consigo encontrar um recurso bom e completo para aprender o "novo" OpenGL, evitando tópicos obsoletos.

Alguém pode me levar na direção certa? Conheço C ++ e tenho 10 anos de experiência em desenvolvimento ... onde encontro um bom recurso ?! Quero dedicar tempo a isso e quero aprender profundamente.

MatterGoal
fonte

Respostas:

69

Concordo com os livros acima com algumas notas:

  • O oitavo guia de programação do OpenGL foi lançado e foi refeito para o moderno OpenGL 4.3.

  • O SuperBible 5 ed fornece uma biblioteca de muletas para você começar, mas, ao ler o livro, você reimplementa a funcionalidade dessa biblioteca para que, ao final, você seja totalmente versado. Eu também recomendo agrupar coisas do OpenGL em algo se você estiver usando uma linguagem orientada a objetos. Estou trabalhando em minha própria biblioteca por diversão, o que parece ser o caminho a percorrer, implementando-a eu mesmo. Entendo todos os meandros e preciso apenas inserir os bits que realmente uso. Além disso, você pode abstrair algumas coisas, como enviar dados para shaders (não é mais brilhanteMaterial.setColor (Vermelho) muito melhor), isso também pode permitir o suporte de algumas coisas, fornecendo alternativas herdadas. Há também oglplus .

O principal problema com a aprendizagem moderna do OpenGL 'básico' é que, para instalar um pipeline básico, mesmo que seja apenas para desenhar um cubo, é necessário entender o seguinte:

  • Operações de matriz (use o GLM se você estiver em C ++, você também precisará de uma versão do SDK não oficial do MatrixStack OpenGL aqui , ou da minha aqui .)
  • Programação de shader GLSL.
  • vinculando dados a shaders e objetos de buffer do vértice. Se você quisesse aprender apenas o perfil básico puro real, todos eles precisariam ser implementados simultaneamente e, se algo estiver quebrado, você não verá nada e quase não tem idéia de onde deu errado. Isso também não abrange itens como iluminação básica (onde você precisa aprender os algoritmos de sombreamento além da linguagem de programação).

Mas você não precisa começar no deependente com o perfil principal. Use algumas das funcionalidades descontinuadas no início, quase tudo ainda a suportará e depois modernize-a.

Outra questão é que o OpenGL 'moderno' pode realmente se referir a três coisas:

  • O primeiro é o pipline de shader programável, em oposição ao pipeline de função fixa. As principais técnicas 'modernas' são possíveis desde que o OpenGL 2.0 foi lançado em 2004, quando os shaders foram introduzidos (os tutoriais não foram atualizados) e também o 1.5 tinha o Vertex Buffer Objects, que é outra pedra angular do OpenGL moderno. Um problema é que ainda hoje os desenvolvedores do OpenGL podem nem mesmo tirar proveito disso, existem muitos netbooks ruins com chipsets Intel que suportam apenas o OpenGL 1.5 e telefones como iPhones / Android mais antigos que suportam apenas OpenGL ES 1.1. A única diferença real entre esse material no OpenGL 2.0 e no OpenGL 3.x / 4.x é agora obrigatório para o perfil principal.

  • O OpenGL moderno também pode se referir às novidades que estão na versão 3.x, 4.x. Coisas como objetos Vertex matriz , FrameBuffer objetos , uniformes tampão Objetos / std140 , qualificadores de layout , sub-rotinas GLSLe assim por diante. Muitos dos que encontrei podem tornar as coisas muito mais agradáveis ​​para programar. Eles também podem alterar sutilmente seus oleodutos gerais do motor. Eles também são coisas que, com um pouco de esforço, você pode realizar o backport, criando funções auxiliares e assim por diante (por exemplo, escreva um objeto genérico de gerenciador de shader que você possa usar para definir uniformes, se houver suporte para UBOs que possam gerenciar o upload dos valores para shaders manualmente , talvez coloque um pouco de shader reescrevendo o material para automatizá-lo). Esse material é executado apenas em novas placas de vídeo; você não verá nenhum netbook suportando ou qualquer console de videogame da geração atual (eles usam seu próprio subconjunto do OpenGL semelhante ao OpenGL ES). O OSX mais recente possui apenas 3.

  • O UltraGL nextgen OpenGL. O OpenGL 4.3 acabou de ser lançado. Ele vem com shaders de computação, glMultiDrawElementsIndirect e buffers de armazenamento de shader. Isso permite um pipeline fundamentalmente diferente, no qual você carrega todos os dados de vértice na GPU e, em seguida, usa sombreadores de computação para calcular o que deve ser desenhado, em vez de fazê-lo em seu programa. Infelizmente, isso é muito novo, então não conheço nenhum tutorial decente sobre ele. Dê uma olhada na revisão do OpenGL 4.3, que fornece um esboço de como isso funciona (também o autor diz que há um artigo do GPU Pro a ser lançado explicando isso). Sendo novinho em folha, não será suportado em nenhum lugar neste estágio (a menos que você esteja em uma placa nvidia mais nova com drivers beta). Embora você possa usar o OpenCL / CUDA para implementar algumas delas.

Eu pularia glBegin, glEnd, glVertex *, glNormal *, glTextCoord *, glTranslate *, glRotate *, glLoadIdenity, glModelViewMatrix e assim por diante. Em vez disso, comece aprendendo Objetos de buffer do vértice sem sombreadores, não tente 3D neste momento apenas um triângulo branco liso, para que você não precise trabalhar com operações 3D usando matrizes (pois precisará aprender a vinculá-los a sombreadores em breve) não faz sentido aprender à maneira antiga). Em seguida, adicione os shaders, você precisará alterar como os objetos do buffer de vértice são vinculados, pois agora você deseja usar atributos de vértice. Aprenda a comunicar propriedades a eles por meio de uniformes. Em seguida, aprenda operações de matriz com o GLM, vincule as matrizes aos shaders e faça o 3D funcionar. Depois que você fizer isso, basicamente aprenderá coisas mais avançadas, como texturas,

Alguns tutoriais modernos gerais do OpenGL on-line, cobrindo o pipeline de programação de sombreadores que a maioria funciona com o OpenGL 2.0+:

Para outros recursos gerais de aprendizagem. O OpenGL ES pode ser um bom ponto de partida. O OpenGL ES retirou todo o material obsoleto. O OpenGL 4.1 tem total compatibilidade com o OpenGL ES, portanto, deve ser possível pegar um programa OpenGL ES e executá-lo no OpenGL 4.1. E os princípios básicos são os mesmos para ambos.

Algumas coisas a serem observadas é que o OpenGL ES 3.0 acaba de ser lançado, mas como é novo, ele ainda não possui tutoriais ou suporte de hardware. Parece não ter grandes mudanças fundamentais (como a diferença entre o modelo de pipeline fixo e shader que vimos no OpenGL ES 1.0-> 2.0). Então você provavelmente não estará aprendendo coisas desatualizadas.

Além disso, o OpenGL ES geralmente usa o EGL, portanto você precisará aprender outra maneira de abrir uma janela, mas isso não deve ser muito difícil. Caso contrário, existem alguns invólucros / emuladores do OpenGL ES disponíveis ou você pode aprender no Android / iPhone, se tiver um (ou usar os emuladores).

Existe o Guia de Programação Addison Wesley OpenGL ES 2.0, que é o equivalente ao livro vermelho.

Você também pode ver as coisas focadas no shader GLSL, já que é aí que vive a maioria dos modernos OpenGL. Você só precisa garantir que o que você aprenda cubra o lado da cola do OpenGL.

Confira a 2ª edição do OpenGL Shading Language (Orange Book).

O Livro de Receitas do OpenGL 4.0 Shading Language cobre algumas coisas mais avançadas do OpenGL, mas não é um tutorial abrangente. Definitivamente, vale a pena procurar entender as práticas OpenGL mais recentes do mundo real, como objetos de buffer uniformes e sub-rotinas GLSL.

Finalmente, você pode dar uma olhada no WebGL, apesar de estar em JavaScript que será um pouco diferente e muito mais difícil de depurar.

David C. Bishop
fonte
3
+1, uau. A única pequena alteração que eu sugeriria seria usar matrizes de vértices do lado do cliente no início, pois são um caminho mais fácil para as VBOs, mas sem algumas das armadilhas de urso nas quais os iniciantes podem cair.
Maximus Minimus
11
Achei que era melhor evitar aprender / usar especificamente funcionalidades obsoletas, pois isso seria algo que teria que ser desaprendido. As outras coisas obsoletas que sugiro usar são coisas que o OpenGL fará por padrão, como poder renderizar sem usar um sombreador e assumir que o atributo de vértice 0 é a posição que ambos devem explodir ao ativar o perfil principal.
David C. Bishop
2
A 6ª edição do SuperBible acaba de ser lançada e é MUITO melhor que a 5ª. Eu recomendo muito, é fácil seguir e aprender o OpenGL moderno.
Philip
2
O site gltut Arcsynthesis já não está disponível, mas o tutorial ainda pode ser descarregado a partir bitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken
15

Esqueça os livros pelo menos até a 8ª edição do guia de programação.

Além do tutorial mencionado , achei este site útil, pois ele passa do básico rapidamente. Ambos são uma ótima introdução ao OpenGL moderno. Depois de superar isso, você precisará apenas da documentação, o OpenGL é fácil de usar quando você se acostumar. O resto é teoria da computação gráfica e matemática.

dreta
fonte
11

Eu estive exatamente na mesma situação que você e finalmente encontrei o que precisava para continuar.

Primeiro vá aqui: http://www.arcsynthesis.org/gltut/ . Este site é fantástico, bons exemplos de trabalho e explicações profundas sobre o que está acontecendo. Mesmo que o código esteja escrito em C ++, estou usando isso para me ensinar a escrever demos do OpenGL no Lisp. Também é totalmente livre da velha maneira de fazer as coisas, para que você não precise se preocupar em pegar maus hábitos.

Eu enfatizaria que, embora seja "apenas outro site", não encontrei nenhum livro que desse uma explicação clara e concisa dos conceitos básicos.

Depois de acessar o site acima, você já terá uma noção básica dos shaders e agora muito do que você precisa saber pode ser pesquisado no Google (dê uma boa olhada nos recursos de opengl es ou webgl, pois eles removeram todo o material obsoleto) ou encontrado no site wiki opengl. O posterior é terrivelmente enigmático se você não tem os fundamentos do site da arcsíntese, mas é bastante útil quando você sabe mais ou menos o que está procurando.

Também para uma visão realmente profunda do GLSL, dê uma olhada em: OpenGL Shader Language (The Orange Book) Estou trabalhando nisso muito lentamente, mas vou lhe dar a compreensão de escrever shaders para permitir que você prossiga essa busca. Avisarei que este livro possui, nas palavras de um revisor, "200 páginas de conteúdo de alta qualidade agrupadas em um livro de 600 páginas", mas o histórico e as informações extras podem fornecer o contexto necessário para entender as rotas que o OpenGL como um padrão caiu (bem, está me ajudando de qualquer maneira!)

Espero que isso ajude e boa sorte, estou ansioso para ver / jogar seu trabalho no futuro!

ATUALIZAR

Parece que a arcsíntese está infelizmente offline, mas o site foi convertido para pdf aqui e o código foi espelhado aqui .

Também nos últimos anos desde a minha resposta original learnopengl.com/ tornou-se absolutamente brilhante. Enquanto eu ainda recomendo a arcsíntese para a excelência bruta de sua introdução ao opengl moderno, o site learnopengl cobre muito mais do que a arcsistese fez e o gerencia com linguagem acessível, criamos exemplos e código-fonte aberto. Basicamente, é muito bom, vá dar uma olhada!

Em relação aos livros, não fui muito longe com o livro laranja, mas posso recomendar a terceira edição do 'Real-Time Rendering' . Quando estiver pronto para o material técnico, este livro será uma mina de ouro.

Baggers
fonte
2
AMD! o primeiro link é fantástico!
MatterGoal
O site gltut já não está disponível, mas o tutorial ainda pode ser descarregado a partir bitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken
Bom ponto, vou atualizar meu post com recomendações extras também.
Baggers
8

Também confira Open.gl . Possui tutoriais usando o moderno Open GL

anirudhrata
fonte
5

Dois sites que foram muito úteis para mim são: http://www.arcsynthesis.org/gltut/ e http://ogldev.atspace.co.uk/

Além disso, o wiki do OpenGL é um recurso extremamente bom e atualizado.

Depois de passar por isso, eu recomendo morder a bala e ler a especificação OpenGL. Então você será um profissional.

Sean
fonte
Sim, acho que os tutoriais on-line são muito mais úteis que a maioria dos livros. A 5ª edição do SuperBible é extremamente decepcionante.
Philip
O site gltut não está mais disponível, mas o tutorial ainda pode ser baixado em bitbucket.org/alfonse/gltut/wiki/Home
Arto Bendiken
4

O melhor livro que me deparei sobre o OpenGL "moderno" é http://www.packtpub.com/opengl-4-0-shading-language-cookbook/book

Embora seja um "livro de receitas", ele o orienta nas etapas necessárias para configurar a renderização e que tipos de bibliotecas complementares você precisará (biblioteca de imagens, biblioteca de matemática de vetores).

Além disso, ele passa por todos os tipos de coisas comuns para as quais você pode querer usar o OpenGL, sem se aprofundar em nada (como nas sombras, ele cobre o mapeamento de sombras e a filtragem de mapas de sombras, mas não entra em detalhes). métodos complexos de mapeamento de sombra).

Eu também recomendo pegar o livro laranja.

Jari Komppa
fonte
Obrigado @Jari. Não é "apenas" sobre shader? Quero dizer, este livro apresenta técnicas de OpenGL e shaders?
MatterGoal
2
@ MatterGoal: O OpenGL moderno é quase completamente baseado em shader. Este livro cobre o lado obrigatório do OpenGL. Também recomendo este livro, mas como companheiro de outra coisa, não é realmente um livro de aprendizado básico, mas mostra alguns ótimos usos no mundo real das práticas de moddrn.
David C. Bishop