Respuestas:
Sí, por nombrar algunos:
La proyección de Pannini, por ejemplo, puede capturar amplios campos de visión de maneras agradables . (totalmente solo mi opinión)
Creo que los detalles de implementación estarían más allá del alcance de esta pregunta específica.
EDITAR: Gracias por el comentario, escribí mal Pannini. Y para que esta edición valga la pena, aquí hay algunos más:
Depende de lo que quieras decir con "que podría usarse en un sistema 3D como OpenGL". :)
En pocas palabras, el hardware de gráficos 3D y las API como OpenGL solo tratan correctamente con proyecciones lineales , proyecciones que asignan líneas rectas en el espacio mundial a líneas rectas en la imagen. Nunca distorsionan algo en una forma curva (a menos que sea curva para empezar). Esto se debe a que las GPU dependen de triángulos que tienen bordes rectos para rasterizarlos correctamente en la pantalla.
Si nos limitamos a las proyecciones lineales, no hay demasiadas opciones. Además del estándar orto y perspectiva, también hay variaciones "descentradas" que se obtienen al cortar el tronco de la vista.
Estas proyecciones pueden representarse con la matriz de proyección 4 × 4 habitual y utilizarse en una API 3D sin problemas.
Luego están las proyecciones no lineales, que no tienen la restricción de mapear líneas rectas a líneas rectas; se les permite distorsionar las cosas en curvas. Hay muchos de estos, incluidos cilíndricos, esféricos, varios tipos de ojo de pez y otros.
Con proyecciones no lineales, no puede simplemente usar una matriz de proyección; tienes que implementar de alguna manera la proyección usando sombreadores. Una forma es escribir un sombreador de vértices personalizado para hacer la proyección por vértice. La GPU seguirá dibujando el triángulo con líneas rectas entre los vértices, por lo que, si bien los triángulos pequeños estarán bastante cerca de ser correctos, los triángulos más grandes estarán notablemente equivocados. Esto puede causar problemas , y la geometría puede necesitar subdividirse muy finamente para renderizarse correctamente.
Un segundo enfoque para obtener una proyección no lineal es renderizar la escena usando una proyección en perspectiva regular primero (tal vez en un mapa de cubos, que tiene una proyección en perspectiva para cada cara del cubo), luego aplique un sombreador de píxeles posterior al proceso para volver a muestrearlo al deseado Proyección no lineal. Esto tiene la ventaja de no requerir modificaciones de geometría, pero puede ser más costoso debido al trabajo de renderizado adicional requerido, y el resultado puede ser borroso en algunas áreas si el renderizado de primer paso no tiene suficiente resolución. Los juegos Oculus Rift utilizan el enfoque posterior al proceso, por ejemplo, para implementar la proyección no lineal que Rift requiere para trabajar con sus lentes.
No puedo creerlo, pero nadie ha mencionado la Proyección isométrica, que solía ser bastante común.