Réponses:
Oui, pour n'en nommer que quelques-uns:
La projection Pannini, par exemple, peut capturer de larges champs de vision de manière agréable . (totalement juste mon avis)
Je pense que les détails de mise en œuvre dépasseraient le cadre de cette question spécifique.
EDIT: Merci pour le commentaire, j'ai mal orthographié Pannini. Et pour que cette modification en vaille la peine, voici quelques autres:
Cela dépend de ce que vous entendez par «qui pourrait être utilisé dans un système 3D comme OpenGL». :)
De manière générale, le matériel graphique 3D et les API comme OpenGL ne traitent correctement que les projections linéaires - des projections qui mappent des lignes droites dans l'espace mondial avec des lignes droites sur l'image. Ils ne déforment jamais quelque chose en une forme incurvée (sauf si elle a été incurvée au départ). En effet, les GPU dépendent de triangles ayant des bords droits afin de les pixelliser correctement à l'écran.
Si nous nous limitons aux projections linéaires, il n'y a pas trop de choix. En plus de l'ortho et de la perspective standard, il existe également des variations "décentrées" qui sont obtenues en cisaillant le tronc de la vue.
Ces projections peuvent être représentées avec la matrice de projection 4 × 4 habituelle et utilisées sans problème dans une API 3D.
Ensuite, il y a les projections non linéaires, qui n'ont pas la restriction de faire correspondre les lignes droites aux lignes droites; ils sont autorisés à déformer les choses en courbes. Il y en a beaucoup, notamment cylindrique, sphérique, divers types de fisheye et autres.
Avec les projections non linéaires, vous ne pouvez pas simplement utiliser une matrice de projection; vous devez en quelque sorte implémenter la projection vous-même à l'aide de shaders. Une façon consiste à écrire un vertex shader personnalisé pour effectuer la projection par sommet. Le GPU dessinera toujours le triangle avec des lignes droites entre les sommets, donc si les petits triangles seront assez proches pour être corrects, les triangles plus grands seront visiblement faux. Cela peut entraîner des problèmes et il peut être nécessaire de subdiviser la géométrie très finement pour un rendu correct.
Une deuxième approche pour obtenir une projection non linéaire consiste à rendre la scène en utilisant d'abord une projection en perspective régulière (peut-être sur un cubemap, qui a une projection en perspective pour chaque face de cube), puis d'appliquer un shader de pixel post-traitement pour le rééchantillonner à la vue souhaitée projection non linéaire. Cela a l'avantage de ne pas nécessiter de modifications de la géométrie, mais cela peut être plus cher en raison du travail de rendu supplémentaire requis, et le résultat peut être flou dans certaines zones si le rendu de premier passage n'a pas une résolution suffisante. L'approche post-processus est utilisée par les jeux Oculus Rift, par exemple, pour implémenter la projection non linéaire dont le Rift a besoin pour fonctionner avec ses lentilles.
Je ne peux pas le croire, mais personne n'a mentionné la projection isométrique qui était assez courante.