Gibt es andere 3D-Projektionen als orthografische und perspektivische? [geschlossen]

22

Die Frage steht so ziemlich im Titel. Gibt es bemerkenswerte 3D-Projektionen, die nicht orthografisch und perspektivisch sind und in einem 3D-System wie OpenGL verwendet werden könnten?

Insbesondere gibt es welche, die eine besondere Verwendung im Spieledesign haben?

jmite
quelle

Antworten:

23

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:

  • Paraboloid / Dual-Paraboloid (nützlich für Reflexionen, Schatten, Glasmalerei)
  • Equirectangular (Kann eine Weltkartenansicht einer Kugel erzeugen)
  • Sphärisch
  • Sinusförmig
MickLH
quelle
4
+1 für Panini-Projektion; Davon hatte ich noch nie gehört. Übrigens, solange es sich um nichtlineare Projektionen handelt, wird Dual-Paraboloid manchmal für Umgebungskarten und Schattenkarten verwendet.
Nathan Reed
Sehr wählerisch, aber es scheint sich um die "Pannini" -Projektion zu handeln, nicht um die "Panini" -Projektion.
Aardvarkk
Sehr cool! Ich vermute, das sind alle nicht linear, wie Nathan Reed sagt?
Jmite
Ich glaube, Sie müssen höchstwahrscheinlich Hardware-Tessellation oder Bildverarbeitung verwenden, um sie in der Praxis zu erreichen. Ich habe Probleme, an eine andere Projektion zu denken, die gerade Linien in gerade Linien abbildet, aber ich werde sie zu dieser Antwort hinzufügen, wenn ich etwas finde.
MickLH
Es existiert wahrscheinlich nicht, das ist genau die Art von Denken, an die ich gedacht habe!
Mittwoch,
15

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.

  • Eine außermittige ortho-Projektion wird Schrägprojektion genannt und wird häufig für technische Diagramme verwendet, kommt aber in Spielen nicht häufig vor.
  • Bei der Stereo-3D-Wiedergabe werden außermittige perspektivische Projektionen verwendet , da sich herausstellt, dass die Ansichten für das linke und das rechte Auge im Gehirn besser verschmelzen, wenn Sie die Kegelstümpfe scheren, anstatt sie zu drehen, um auf ein Objekt zu fokussieren.

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.

Nathan Reed
quelle
1

Ich kann es nicht glauben, aber niemand hat die früher übliche isometrische Projektion erwähnt .

Roy T.
quelle
11
Soweit ich weiß, sind isometrische Projektionen spezifische Anwendungsfälle der beiden anderen Projektionstypen, orthografische und perspektivische. Bei einer Orthoprojektion mit einer Ansicht in einem bestimmten Winkel erhalten Sie beispielsweise eine isometrische Kamera.
Grimshaw