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.
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.
fonte
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.
fonte
Também confira Open.gl . Possui tutoriais usando o moderno Open GL
fonte
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.
fonte
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.
fonte
Mais alguns tutoriais e outras coisas que não foram mencionadas, mas úteis
fonte