Começando com o OpenGL quando a maioria dos tutoriais está desatualizada [fechada]


16

Tenho certeza de que já existem várias perguntas como essa, mas a atualização constante da biblioteca OpenGL as descarta e, em um ou dois meses, as respostas aqui serão inúteis novamente.

Estou pronto para iniciar a programação no OpenGL usando C ++. Eu tenho um compilador funcional (DevCpp; NÃO me peça para mudar para o VC ++ e não me pergunte o porquê). Agora estou apenas procurando um tutorial sólido sobre como programar com o OpenGL. Meu assistente encontrou o tutorial fornecido pela NeHe Productions, mas como eu descobri, é MUITO FORA DA DATA! (embora eu tenha reunido uma janela básica para suportar uma tela OpenGL)

Então eu fui online, e encontrei o OpenGL SuperBible, que aparentemente usa freeglut? Mas o que eu gostaria de saber é se a SuperBible 5th edition está ou não atualizada. A sugestão de freeglut que eu encontrei disse que a versão mais recente era 2.6.0, mas agora é 2.8.0!

  • O OpenGL SuperBible ainda é um local bom e bastante atualizado para começar?
  • Existe um lugar melhor para aprender OpenGL?
  • Posso simplesmente armazenar freeglut no diretório de inclusão do DevCpp (talvez no GL) ou há algum procedimento importante?
  • Existem comentários ou sugestões que eu não pensei em perguntar, pois estou apenas começando?

A @dreta esclareceu algumas coisas para mim, então agora tenho uma idéia melhor do que perguntar:

Eu acho que gostaria de começar com o OpenGL usando uma biblioteca de wrapper em vez de acessar diretamente o OpenGL.
Eu apenas acho que, para um iniciante, seria mais fácil programar e obter bons resultados, embora ainda não precise entender todos os detalhes sombrios (como o @stephelton mencionou).

O problema é que não consigo encontrar nenhuma biblioteca que não tenha referências indefinidas para as funções que não são mais suportadas. Freeglut parece operacional, mas ainda usa GLU.
Alguém sabe o que eu posso fazer?
Além disso, tentei compilar a primeira fonte do SuperBible, mas obtive erros porque o GLAPI não está sendo definido como um tipo, o erro originário da biblioteca GLU.

Gostaria de usar o SuperBible, mas não sei como consertar isso.


2
Você deve mudar para o GCC.
Notlesh # 9/12

DevCpp é apenas um IDE; que executa o GCC (mingw para ser específico). Mas desde que foi mencionado, o Eclipse CDT seria preferível, pois não tem sido abandonware nos últimos 10 anos.
Casper Beyer

4
@Casper O herdeiro do legado do DevCpp foi o Code :: Blocks e ainda é atualizado regularmente.
Alex Shepard

1
Se você quiser uma biblioteca de wrapper em torno do OpenGL, sugiro que tente o SFML . O SFML fornece o material usual, como criação de janelas, temporizadores, etc., além de permitir que você desenhe texto e formas simples. Você pode usar o OpenGL "bruto" sempre que quiser, misturando funções SFML e chamadas de API brutas.
Oskar N.

1
Você não pode "fechar" uma pergunta adicionando "{CLOSED}" ao título. As perguntas serão encerradas pelos moderadores ou se usuários suficientes votaram para encerrá-la. Vou rolou suas edições de volta .. o "FECHADO" será automaticamente anexada ao seu título, se moderadores decidir fechá-lo ..
bummzack

Respostas:


19

Nosso residente Nicol Bolas mantém um livro on-line sobre programação gráfica moderna . Ele usa o OpenGL moderno, tudo é apresentado em um ritmo fácil de consumir, é um bom lugar para começar. Eu o tenho usado para aprender o OpenGL moderno e ele tem me feito maravilhas nos últimos 2 meses.

Além disso, existem pedaços de conhecimento aqui e ali. O wiki do OpenGL é bastante bem mantido. O código não é "práticas recomendadas" e, às vezes, há ambiguidade na versão do OpenGL, mas fora dessas raras ocasiões, é um ótimo recurso.

Se você quiser aprender sobre o GLSL, há o Tutorial do GLSL Core do lighthouse3D. Embora este seja o único conhecimento essencial em que eu "confiaria" no site, o descanso tende a estar desatualizado.

Depois de começar a entender como o OpenGL moderno é feito, será fácil procurar informações específicas, filtrar códigos desatualizados e, o mais importante, ler as especificações. Você apenas tem que começar de algum lugar.

Muitos dos livros disponíveis do OpenGL, se não todos, estão desatualizados. O novo SuperBible é uma aberração de algum tipo e eu não o recomendaria a ninguém. O Guia de programação do OpenGL para OpenGL 4.1 sai em 16 de setembro. Infelizmente, a 7ª edição usa código obsoleto, então você só precisa esperar, com certeza.

E, claro, você sempre pode fazer perguntas aqui.


1
Por que você não sugeriria a SuperBible?
Codesmith

3
@AUTO A 5ª edição do SuperBible usa um wrapper personalizado em torno do OpenGL para torná-lo "acessível". Muitos exemplos usam o invólucro personalizado excessivamente. Ele não ensina o que é necessário, que é a especificação principal do OpenGL. Do jeito que eu vejo, se você não precisa explicitamente aprender o OpenGL obsoleto, esqueça que ele existe. Não faz sentido aprender isso. A especificação principal é muito mais clara e poderosa.
Dreta

@AUTO A especificação principal é muito mais exigente no começo, isso é uma coisa boa. Isso forçará você a cuidar da maior parte do processo de renderização, oferecendo total entendimento e controle sobre ele. Abre muitas, muito mais possibilidades do que o código reprovado. Depois disso, se você puder aprender a API do seu sistema operacional e abrir o OpenGL sem ele como excesso, então você estará no país das maravilhas.
Dreta

OK, então deixe-me fazer uma pergunta importante: a biblioteca GLU parece estar obsoleta e completamente sem suporte; usando a especificação, obtenho acesso direto, ignorando a necessidade da GLU? De modo que, eu não receberia mais erros de vinculador a funções inexistentes referenciadas pela biblioteca GLU?
Codesmith

O @AUTO GLU é completamente desnecessário, eu só o toquei com um bastão de 10 pés durante a aula de programação gráfica (tivemos que usar código obsoleto, foi doloroso, os padrões mudam mais rápido que o programa da lição, eu acho). É apenas uma biblioteca que ajuda com o código obsoleto. Se você tiver seu código configurado com GLU, provavelmente ele fede.
Dreta

1

Já faz um tempo desde que essa pergunta foi feita, mas espero que isso ajude as pessoas que têm a mesma pergunta que você.

Comecei com o OpenGL lendo um minibook arcsynthesis.org. Não tenho certeza de quem escreveu. Parece que o registro do site expirou ou algo assim, mas você deve encontrá-lo aqui: http://web.archive.org/web/20140209181347/http://www.arcsynthesis.org/gltut/ . Ele usa o OpenGL 3.3, portanto você usará o pipeline moderno e todas as práticas que isso implica, mas não será exposto a mosaicos ou shaders de computação.

Outro site que vale a pena visitar é https://open.gl/ . Parece ser MUITO focado no iniciante e não cobre coisas tão profundas quanto o material acima, mas poderia ser um bom ponto de partida para as pessoas que estão apenas começando.

Lembre-se de ler o wiki do OpenGL e pesquisar seus nomes de funções no Google se precisar de ajuda. Algumas das páginas do wiki são completamente inúteis, mas outras são bastante úteis, tanto como referência quanto como material de aprendizado.


1
A pessoa mencionada na resposta aceita escreveu Nicol Bolas - gamedev.stackexchange.com/users/8240/nicol-bolas
Jesse Dorsey

0

Esses tutoriais antigos ainda são muito relevantes para iniciantes. Na verdade, eu sugeriria começar por lá, e não com versões recentes do OpenGL. As versões mais recentes descartaram alguns dos métodos mais fáceis de desenhar geometria (ou seja, desenho em modo imediato).

Nas versões recentes, você precisa preparar e enviar matrizes de vértices e informar à placa de vídeo como seus vértices estão organizados na matriz que você fornece. Essas coisas são difíceis de depurar.

Algumas versões (nomeadamente o OpenGL ES 2.x) exigem que você forneça suas próprias equações de iluminação (na forma de Fragment Shaders) e transforme seus próprios dados de vértice para que eles acabem na tela onde você deseja (Vertex Shaders). Isso é ainda mais difícil de depurar e não é lugar para iniciantes (na minha opinião).

Então, na verdade, sugiro que você volte para os tutoriais do NeHe (etc) e comece por aí. Eles podem estar "desatualizados", mas ainda funcionam. Quando você começar a entender o que realmente acontece no pipeline de renderização no OpenGL e sentir alguns dos conceitos matemáticos que fazem essas coisas funcionarem, estará pronto para examinar alguns dos métodos mais atualizados de renderização em OpenGL.


Na verdade eles não trabalham. Foi por isso que postei esta pergunta. Eles estão usando a função gluPerspective que está obsoleta e não há substituto absoluto.
Codesmith

1
Essa não é uma função do OpenGL. É uma função de utilitário separada fornecida por outra biblioteca. Você pode encontrar o código facilmente - não é muito difícil.
notlesh

Obrigado, mas só encontrei um substituto imperfeito que não sei usar. Ele aceita o argumento "matriz flutuante *", enquanto o antigo usa alguma matriz interna. O que eu coloco para isso então?
Codesmith

O primeiro hit no google de "implementação gluPerspective" é exatamente o que você está procurando. chama glFrustum, que não está disponível em algumas versões recentes do OpenGL (o ES 2.x não o inclui). Mesmo isso não é muito difícil de encontrar o impl.
notlesh

0

Como outros já disseram, a maioria dos livros está obsoleta ou muito avançada. No entanto, eu recomendaria a 5ª edição do SuperBible, mas apenas para obter uma rápida visão geral do que pode ser feito no OpenGL e me familiarizar com coisas como a visão / projeção etc.

Mergulhar imediatamente no OpenGL moderno pode deixar você impressionado no começo, então considere aprender a fazer algumas coisas básicas nas versões agora obsoletas.

Também gostaria de adicionar um site com bons tutoriais que encontrei recentemente http://ogldev.atspace.co.uk/


Obrigado, vou verificar esse tutorial; mas para usar o OpenGL SuperBible, minha pergunta ainda permanece: Como faço para corrigir a GLU, uma vez que o freeglut é baseado nela?
Codesmith

@AUTO: O FreeGLUT não é "baseado em" GLU. Algumas funções do FreeGLUT chamam GLU, mas se você não chamar essas funções, não terá problemas.
Nicol Bolas

Mas não é provável que o SuperBible chame essas funções? E se isso acontecer, não posso usá- lo .
CodeSmith

Realmente, minha opinião é não se preocupar com o código fonte fornecido com o SuperBible. Leia, mas tente fazer tudo do zero. Em seus problemas com a GLU, meu melhor palpite é que você não configurou / instalou suas bibliotecas corretamente. Baixe a versão mais recente do MinGW. Baixe também a versão mais recente do freeglut e compile-a ou encontre uma biblioteca pré-compilada. De qualquer forma, você deve começar a aprender algumas coisas, em vez de gastar tanto tempo planejando como começar.
Grieverheart 12/12/12

@AUTO: Por que é provável que a SuperBible os chame? Se os chamasse, o código da SuperBible não funcionaria. É por isso que não os chama.
Nicol Bolas

0

arcsynthesis.org (o site mencionado na resposta aceita) parece estar inoperante, infelizmente. (EDIT: está disponível neste link !).

Os tutoriais de Anton Gerdelan para o OpenGL 4 são muito legíveis e atualizados em meados de 2014. Os primeiros são gratuitos, o restante está disponível na Amazon, onde eles têm ótimas críticas, por um preço pequeno. Até agora, fiquei satisfeito.

Existem mais tutoriais gratuitos para o OpenGL 3.3+ em http://www.opengl-tutorial.org/ . Eles datam de 2012, mas podem ser um bom material suplementar para outras fontes.


O OGLDev é atual, detalhado e gratuito. ogldev.atspace.co.uk/index.html
Yattabyte 01/01


É bom ver que está disponível! Vou verificar esses materiais também.
IHateCamelCase
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.