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)?
Respostas:
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
fonte
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.
fonte
preamake
pró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..Eu recomendaria começar com esta série de tutoriais, eles são bons e usam recursos mais modernos do que os nehe http://duriansoftware.com/joe/An-intro-to-modern-OpenGL.-Table-of-Contents.html
fonte
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!
fonte
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.
fonte
Aqui está outro. É muito bom. Embora tenha apenas 4 capítulos.
http://openglbook.com/
Outra é http://www.arcsynthesis.org/gltut/ . Este é enorme, lento e de alto perfil.
Não se esqueça de acompanhar o http://www.opengl.org/wiki/Getting_started
fonte
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:
Isso já é muito trabalho.
fonte
Eu aprendi o OpenGL escrevendo um jogo "simples": 3D Tetris !
Tente criar seu próprio jogo / aplicativo simples:
Faça algo simples que lhe interessa!
fonte
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
fonte
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.
fonte
Eu não diria que esta série de tutoriais em vídeo é a melhor maneira, mas está muito bem explicada: www.71squared.com/2009/03/iphone-game-programming-tutorial-1
fonte
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
fonte
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.
fonte
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.
fonte
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 ...
fonte