Atualmente, estou indo para a faculdade de ciência da computação. Embora eu pretenda utilizar um mecanismo existente em algum momento para criar um jogo pequeno, meu objetivo agora é aprender os fundamentos: a programação em 3D. Eu já fiz algumas pesquisas sobre a escolha entre DirectX e OpenGL, e o sentimento geral resultante disso foi que, se você escolhe o OpenGL ou o DirectX como sua plataforma de rodinhas, muito do conhecimento é transferível para outra plataforma . Portanto, como o OpenGL é suportado por mais sistemas (provavelmente uma razão boba para escolher o que aprender), decidi que vou aprender o OpenGL primeiro.
Depois que tomei a decisão de aprender o OpenGL, fiz mais algumas pesquisas e descobri sobre uma dicotomia que de alguma forma eu desconhecia todo esse tempo: OpenGL de função fixa versus OpenGL moderno baseado em shader programável. No começo, eu pensei que era uma escolha óbvia que eu deveria optar por aprender OpenGL baseado em shader, já que é o que é mais comumente usado no setor hoje. No entanto, deparei-me com a muito popular Programação de Gráficos 3D Modernos de Aprendizagem, de Jason L. McKesson, localizada aqui: http://www.arcsynthesis.org/gltut/
Eu li os bits introdutórios e, na seção "Sobre este livro", o autor declara:
"Primeiro, muito do que é aprendido com essa abordagem deve ser inevitavelmente abandonado quando o usuário encontra um problema gráfico que deve ser resolvido com a capacidade de programação. A capacidade de programação limpa quase todo o pipeline de funções fixas, para que o conhecimento não seja transferido facilmente".
ao mesmo tempo, também afirma que a funcionalidade fixa fornece uma curva de aprendizado mais fácil e imediata para iniciantes, afirmando:
"Geralmente é considerado mais fácil ensinar programadores de gráficos de neófitos usando o pipeline de função fixa".
Naturalmente, você pode ver por que eu posso estar em conflito sobre qual paradigma aprender: Passo muito tempo aprendendo (e depois desaprendendo) as formas de funcionalidade fixa, ou escolho começar com shaders? Minha principal preocupação é que os shaders programáveis modernos de alguma forma exijam que o programador já entenda o pipeline de função fixa, mas duvido que seja esse o caso.
TL; DR = Como aspirante a programador de gráficos de jogos, é do meu interesse aprender programação em 3D por meio de funcionalidade fixa ou moderna programação baseada em shader?
fonte
Respostas:
Não acredito no argumento de que é mais fácil começar com as coisas de função fixa. Pode ser que a função fixa permita que você faça certas coisas com menos código - no OpenGL de função fixa, por exemplo, você pode obter alguma iluminação / sombreamento básico fazendo
glEnable(GL_LIGHTING)
e algumas outras chamadas. O problema é que, assim que você deseja algo um pouco diferente - iluminação por pixel, digamos, em vez de iluminação por vértice - você precisa abandonar completamente o material de função fixa e escrever um sombreador para implementar a funcionalidade fixa que você estava usando antes, mais o que você queria mudar.Parece que seria mais simples e menos confuso usar shaders o tempo todo. Os shaders precisam de um pouco mais de trabalho de configuração, pois você tem um arquivo de origem separado que precisa ser carregado e compilado, algumas chamadas C extras para procurar e definir parâmetros, etc. para codificar alguns efeitos diferentes, experimentar idéias diferentes, etc. E você não precisa se preocupar sobre onde estão os limites do sistema de função fixa e se ele pode ou não fazer o que deseja; os shaders podem fazer o que você pode escrever, modular os limites usuais de desempenho e memória.
fonte
Eu diria para começar com a função fixa no GLUT. Não vou dizer muito sobre isso, mas as idéias por trás dos shaders são bastante complicadas e o conhecimento necessário é a programação 3D básica (ou seja, matrizes de criação e transformação de vértices etc.). Existem muitos outros lugares onde você pode estragar usando shaders, e há muito mais para codificar.
Confira o meu tutorial , e esses lighthouse3d queridos
fonte
Eu vou direto para shaders. Não é realmente que muito mais difícil de configurar, e quando você passar esse primeiro obstáculo que você tem pleno poder ao seu alcance.
Mais exatamente, você descobrirá que a programação de sombreadores corresponde mais às equações matemáticas que você vê nas aulas de livros e gráficos na faculdade.
fonte
Eu sugeriria o uso do pipeline de função fixa como espinha dorsal do seu programa. Acho que é mais fácil mostrar algo usando-o em vez de shaders. Então, quando você sabe que não estragou seus vértices ou normais, você pode lenta mas seguramente avançar no mundo das sombras.
fonte