Respostas:
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:
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.
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.
Não acredito, mas ninguém mencionou a Projeção Isométrica, que costumava ser bastante comum.