Risposte:
Sì, per citarne alcuni:
La proiezione Pannini, ad esempio, può catturare ampi campi visivi in modi piacevoli . (totalmente solo la mia opinione)
Penso che i dettagli di implementazione andrebbero oltre lo scopo di questa domanda specifica.
EDIT: Grazie per il commento, ho sbagliato a scrivere Pannini. E per rendere utile questa modifica eccone alcune altre:
Dipende da cosa intendi con "che potrebbe essere utilizzato in un sistema 3D come OpenGL". :)
In parole povere, l'hardware grafico 3D e le API come OpenGL gestiscono correttamente solo le proiezioni lineari - proiezioni che mappano le linee rette nello spazio mondiale alle linee rette sull'immagine. Non distorcono mai qualcosa in una forma curva (a meno che all'inizio non sia stata curvata). Questo perché le GPU dipendono da triangoli con bordi diritti per rasterizzarli correttamente sullo schermo.
Se ci limitiamo a proiezioni lineari, non ci sono troppe scelte. Oltre all'orto e alla prospettiva standard, ci sono anche variazioni "decentrate" che si ottengono tranciando la vista.
Queste proiezioni possono essere rappresentate con la solita matrice di proiezione 4 × 4 e utilizzate senza problemi in un'API 3D.
Poi ci sono le proiezioni non lineari, che non hanno la restrizione di mappare linee rette su linee rette; sono autorizzati a distorcere le cose in curve. Ce ne sono molti, tra cui cilindrici, sferici, vari tipi di fisheye e altri.
Con le proiezioni non lineari, non puoi semplicemente usare una matrice di proiezione; devi in qualche modo implementare tu stesso la proiezione usando gli shader. Un modo è scrivere uno shader di vertice personalizzato per fare la proiezione per vertice. La GPU disegna comunque il triangolo con linee rette tra i vertici, quindi mentre piccoli triangoli saranno abbastanza vicini alla correzione, i triangoli più grandi saranno notevolmente sbagliati. Ciò può causare problemi e potrebbe essere necessario suddividere la geometria in modo molto fine per renderizzare correttamente.
Un secondo approccio per ottenere una proiezione non lineare è rendere prima la scena usando una proiezione prospettica regolare (forse su una cubemap, che ha una proiezione prospettica per ogni faccia del cubo), quindi applicare un pixel shader post-processo per ricampionarlo nel modo desiderato proiezione non lineare. Ciò ha il vantaggio di non richiedere modifiche alla geometria, ma può essere più costoso a causa del lavoro di rendering aggiuntivo richiesto e il risultato può essere sfocato in alcune aree se il rendering di primo passaggio non ha una risoluzione sufficiente. L'approccio post-process viene utilizzato dai giochi Oculus Rift, ad esempio, per implementare la proiezione non lineare che Rift richiede per funzionare con i suoi obiettivi.
Non ci posso credere, ma nessuno ha menzionato la proiezione isometrica che era abbastanza comune.