Eu me codifiquei como visualizador OpenGL BSP para um formato de jogo antigo. É muito semelhante ao formato de arquivo Quake 3. Como meu interesse é desenvolver mecanismos gráficos, quero estar desenvolvendo enquanto uso a tecnologia atual. Por isso, recorro a vocês, especialistas no assunto, para orientações sobre o que focar. Gostaria que fosse o mais rápido possível e, considerando que os formatos de arquivo antigos são muito simples e têm poucos polígonos, acho que deve ser possível. Aqui estão as minhas perguntas:
Iluminação a. Faz sentido para mim aprender a iluminação de vértices ou devo apenas implementar a iluminação por pixel? Eu sei que o OpenGL tem um limite de 8 luzes. Devo realisticamente usar apenas um desses para luz ambiente e o restante computador através de shaders? Caso contrário, o que devo fazer?
Classificação / Seleção a. Qual é o algoritmo usado mais rápido e mais comum para classificar superfícies a serem renderizadas. Complexidade não é realmente um problema. Quero aprender o que está sendo usado no momento e maneiras de realmente renderizar apenas as coisas que posso ver. Eu já vi vários algoritmos descritos como o algoritmo do pintor e estou me perguntando o que faz mais sentido para a geometria baseada em BSP. b. Se eu tenho texturas com máscaras alfa, me disseram que a classificação tem algum tipo de envolvimento com esse processo. Como permito que eles sejam renderizados corretamente no espaço 3D?
Pipeline de gráficos a. Devo enviar meus dados de geometria via VBOs? Esse é o padrão usado hoje? b. Se eu tiver várias "regiões", possivelmente 200 a 300, devo encontrar uma maneira melhor de enviá-las para a GPU sem enviar 200 a 300 partes. Devo combiná-los em um e manter uma referência associada a cada um.
Alguma outra dica para renderização baseada em BSP e coisas dessa natureza?
Além disso, se eu disser algo incorreto, corrija-me. Sou aquela pessoa que prefere ser corrigida e um pouco envergonhada do que ignorante e inconsciente.
Obrigado pelo seu tempo. Eu realmente aprecio isso.
Respostas:
Se você está - como você diz - interessado na tecnologia atual :
1) Iluminação: iluminação por pixel, definitivamente. Se você quiser ver a renderização de geração atual, escreverá somers de vértice e pixels. Simples assim. Eles oferecem flexibilidade quase ilimitada e não são muito mais difíceis de usar do que o pipeline de função fixa, se você começar a aprendê-los adequadamente. O limite de luz 8 do OpenGL é aplicável apenas para configurações de pipeline de função fixa antiquadas. Não siga esse caminho, aprenda o OpenGL Core e esqueça todas as coisas datadas do glBegin / glEnd.
2) Classificação / Seleção: Para começar: classifique apenas se você precisar de transparência. Somente objetos de seleção que estão fora do campo de visão.
3) Se você estiver usando o OpenGL, use VBO e VAO.
-
Não perguntado: se você está criando um visualizador para um formato BSP antiquado (suspeito de algo de um mecanismo Valve / ID antigo), você deve conseguir desenhar o nível inteiro sem nenhum tipo de otimização (seleção / bsp ) e ainda obtém a taxa de quadros completa no hardware moderno;)
Dica do OpenGL: Obtenha a 5ª edição do OpenGL Superbible. Isso o ensinará a criar o OpenGL moderno e não obscurecerá sua mente com coisas que você descobrirá mais tarde que estão desatualizadas.
fonte
1.a A iluminação por vértice é mais fácil que a iluminação por pixel (a iluminação por vértice é integrada ao OpenGL, a iluminação por pixel requer um sombreador personalizado).
1.b Se você tiver oito luzes, use-as! Você terá que calcular quais luzes são visíveis, no entanto.
3.a Use o VBOS. Nunca use glBegin / glEnd (a menos que você use listas de exibição, mas na sua situação os VBOs são a melhor solução)
3.b Você não deve se preocupar com o desempenho enquanto o programa ainda estiver em desenvolvimento. Especialmente com o hardware atual. Então, envie seus 200-300 pedaços.
Não conheço bem os mapas BSP para ajudá-lo com suas outras perguntas.
fonte