Antworten:
Ja, um nur einige zu nennen:
Die Pannini-Projektion kann zum Beispiel große Sichtfelder auf schöne Weise erfassen . (total nur meine meinung)
Ich denke, Implementierungsdetails würden den Rahmen dieser speziellen Frage sprengen.
EDIT: Danke für den Kommentar, ich habe Pannini falsch geschrieben. Und damit sich diese Bearbeitung lohnt, hier noch ein paar mehr:
Es kommt darauf an, was Sie mit "das könnte in einem 3D-System wie OpenGL verwendet werden" meinen. :)
3D-Grafikhardware und APIs wie OpenGL arbeiten im engeren Sinne nur korrekt mit Linear Projektionen - Projektionen, die gerade Linien im Weltraum auf gerade Linien im Bild abbilden. Sie verzerren niemals etwas in eine gekrümmte Form (es sei denn, es war von Anfang an gekrümmt). Dies liegt daran, dass GPUs von Dreiecken mit geraden Kanten abhängen, um sie korrekt auf dem Bildschirm zu rastern.
Wenn wir uns auf lineare Projektionen beschränken, gibt es nicht allzu viele Möglichkeiten. Zusätzlich zu der Standardortho und -perspektive gibt es auch "außermittige" Variationen, die durch Abscheren des Sichtstumpfes erhalten werden.
Diese Projektionen können mit der üblichen 4 × 4-Projektionsmatrix dargestellt und problemlos in einer 3D-API verwendet werden.
Dann gibt es die nichtlinearen Projektionen, die nicht die Einschränkung haben, gerade Linien auf gerade Linien abzubilden; Sie dürfen Dinge in Kurven verzerren. Es gibt viele davon, darunter zylindrische, kugelförmige, verschiedene Arten von Fischaugen und andere.
Bei nichtlinearen Projektionen können Sie nicht einfach eine Projektionsmatrix verwenden. du musst die projektion irgendwie selbst mit shadern umsetzen. Eine Möglichkeit besteht darin, einen benutzerdefinierten Vertex-Shader zu schreiben, um die Projektion pro Vertex durchzuführen. Die GPU zeichnet das Dreieck weiterhin mit geraden Linien zwischen den Scheitelpunkten. Während kleine Dreiecke der Korrektur ziemlich nahe kommen, sind größere Dreiecke merklich falsch. Dies kann zu Problemen führen , und die Geometrie muss möglicherweise sehr fein unterteilt werden, um korrekt zu rendern.
Ein zweiter Ansatz, um eine nichtlineare Projektion zu erhalten, besteht darin, die Szene zuerst mit einer regulären perspektivischen Projektion zu rendern (möglicherweise auf einer Cubemap, die eine perspektivische Projektion für jede Cube-Fläche enthält) und dann einen Pixel-Shader nach dem Prozess anzuwenden, um sie auf die gewünschte Größe neu abzutasten nichtlineare Projektion. Dies hat den Vorteil, dass keine Geometriemodifikationen erforderlich sind. Aufgrund der zusätzlichen Renderarbeit kann dies jedoch teurer sein. Das Ergebnis kann in einigen Bereichen unscharf sein, wenn das Rendering im ersten Durchgang nicht über eine ausreichende Auflösung verfügt. Der Post-Process-Ansatz wird beispielsweise von Oculus Rift-Spielen verwendet, um die nichtlineare Projektion zu implementieren, die Rift für die Arbeit mit seinen Linsen benötigt.
Ich kann es nicht glauben, aber niemand hat die früher übliche isometrische Projektion erwähnt .