Existem projeções em 3D que não sejam ortográficas e de perspectiva? [fechadas]

22

A questão está praticamente no título. Existem projeções 3D notáveis ​​que não sejam ortográficas e de perspectiva que possam ser usadas em um sistema 3D como o OpenGL?

Em particular, há alguém que tenha um uso específico no design de jogos?

jmite
fonte

Respostas:

23

Sim, para citar alguns:

A projeção de Pannini, por exemplo, pode capturar amplos campos de visão de maneiras agradáveis . (totalmente apenas minha opinião)

Eu acho que os detalhes da implementação estariam além do escopo desta questão específica.


EDIT: Obrigado pelo comentário, eu escrevi incorretamente Pannini. E para fazer esta edição valer a pena, aqui estão mais algumas:

  • Parabolóide / Parabolóide Duplo (Útil para reflexões, sombras, vitrais)
  • Equiretangular (pode produzir uma visualização do mapa mundial de uma esfera)
  • Esférico
  • Sinusoidal
MickLH
fonte
4
+1 para projeção Panini; Eu nunca tinha ouvido falar disso antes. BTW, desde que falemos de projeções não lineares, o parabolóide duplo é usado algumas vezes para mapas de ambientes e mapas de sombras.
Nathan Reed
Sendo muito exigente, mas parece ser a projeção "Pannini", não "Panini".
aardvarkk
Muito legal! Acho que tudo isso é não linear, como diz Nathan Reed?
jmite
Acredito que sim, você provavelmente precisará usar mosaico de hardware ou processamento de imagem para alcançá-los na prática. Estou tendo problemas para pensar em outra projeção que mapeia linhas retas em linhas retas, mas adicionarei a essa resposta se surgir alguma coisa.
MickLH
Provavelmente não existe, esse é exatamente o tipo de pensamento em que eu estava pensando!
jmite
15

Depende do que você quer dizer com "que pode ser usado em um sistema 3D como o OpenGL". :)

A rigor, o hardware de gráficos 3D e as APIs como o OpenGL lidam corretamente com projeções lineares - projeções que mapeiam linhas retas no espaço do mundo para linhas retas na imagem. Eles nunca distorcem algo em uma forma curva (a menos que tenha sido curvada para começar). Isso ocorre porque as GPUs dependem de triângulos com arestas retas para rasterizá-los corretamente na tela.

Se nos limitamos a projeções lineares, não há muitas opções. Além do orto e perspectiva padrão, também existem variações "descentralizadas" que são obtidas cortando o frustum da vista.

  • Uma projeção orto fora do centro é chamada de projeção oblíqua e é frequentemente usada para diagramas de engenharia, mas não aparece muito nos jogos.
  • As projeções em perspectiva descentralizadas são usadas na renderização 3D estéreo , pois as vistas do olho esquerdo e direito se fundem melhor no cérebro se você cortar os frustum em vez de girá-los para focar em um objeto.

Essas projeções podem ser representadas com a matriz de projeção 4 × 4 usual e usadas em uma API 3D sem problemas.

Depois, há as projeções não lineares, que não têm a restrição de mapear linhas retas para linhas retas; eles podem distorcer as coisas em curvas. Existem muitos deles, incluindo cilíndricos, esféricos, vários tipos de olho de peixe e outros.

Com projeções não lineares, você não pode simplesmente usar uma matriz de projeção; você precisa de alguma forma implementar a projeção usando shaders. Uma maneira é escrever um sombreador de vértice personalizado para fazer a projeção por vértice. A GPU ainda desenhará o triângulo com linhas retas entre os vértices; portanto, enquanto os triângulos pequenos estiverem muito próximos da correção, os triângulos maiores ficarão visivelmente errados. Isso pode causar problemas , e a geometria pode precisar ser subdividida muito finamente para renderizar corretamente.

Uma segunda abordagem para obter uma projeção não linear é renderizar a cena usando uma projeção em perspectiva regular primeiro (talvez para um mapa de cubo, que possui uma projeção em perspectiva para cada face do cubo) e, em seguida, aplique um shader de pixel pós-processo para reamostrá-lo para o desejado projeção não linear. Isso tem a vantagem de não exigir modificações na geometria, mas pode ser mais caro devido ao trabalho extra de renderização necessário, e o resultado pode ficar embaçado em algumas áreas se a renderização de primeira passagem não tiver resolução suficiente. A abordagem pós-processo é usada pelos jogos Oculus Rift, por exemplo, para implementar a projeção não linear que o Rift requer para trabalhar com suas lentes.

Nathan Reed
fonte
1

Não acredito, mas ninguém mencionou a Projeção Isométrica, que costumava ser bastante comum.

Roy T.
fonte
11
Tanto quanto sei, as projeções isométricas são casos de uso específicos dos outros dois tipos de projeção, ortográfica e de perspectiva. Por exemplo, uma projeção orto com uma vista em um determinado ângulo fornece uma câmera isométrica.
Grimshaw