Warum werden Breite und Höhe in der perspektivischen Projektionsmatrix durch 2 geteilt?

9

Ich benutze OpenGL, um Computergrafik zu lernen. Ich versuche Projektionsmatrizen zu verstehen. Folgendes wird im OpenGL 'Red Book' gezeigt:

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Ich verstehe nicht, warum die Breite und Höhe durch 2 geteilt werden?

Mikeglaz
quelle

Antworten:

11

xproj0widthwidth2width2

xproj(0,0)


Übrigens ist das Rote Buch keine gute Einführung in die Grafik im Allgemeinen. Es ist ein technischer Standard, kein Tutorial, daher reicht die Erklärung von Konzepten gerade aus, um eindeutig zu sein - es wird nicht versucht , das Material zu vermitteln. Es geht auch insbesondere um eine Scanline-Rendering-Bibliothek, daher gibt es viele wichtige Konzepte, die überhaupt nicht beschrieben werden, z. B. welche BRDFs wichtig sind, wie sie sich auf reale Oberflächeneigenschaften beziehen, was ein Bild wirklich ist und viele übergeordnete Techniken.

Und schließlich geht es auch in diesem Bereich - wie man eine GPU verwendet, um das Rendern zu beschleunigen - schrecklich veraltet. Die GL-Architektur basiert auf GPUs von vor 20 Jahren. Obwohl viele Funktionen hinzugefügt wurden, um mit Änderungen an der Hardware Schritt zu halten, sind die grundlegenden Abstraktionen kein guter Weg, um aktuelle GPU-Architekturen zu verstehen.

Wenn Sie mehr über die Theorie der Computergrafik erfahren möchten, beginnen Sie mit einem geeigneten Lehrbuch wie Physikalisch basiertes Rendern oder Computergrafik: Prinzipien und Praxis oder einem Online-Kurs. Wenn Sie lernen möchten, wie Sie eine 3D-Anwendung erstellen, beginnen Sie mit einem Tutorial über die Art der Anwendung, an der Sie interessiert sind (z. B. wenn es sich um ein Spiel handelt, versuchen Sie es mit einem Unity-Tutorial).

Dan Hulme
quelle
Wow, genau das habe ich gesucht. Ich habe angefangen, ein Lehrbuch zur linearen Algebra zu lesen ... aber welche Art von Mathematik muss ich für physikalisch basiertes Rendern wissen?
Mikeglaz
2
xproj0width
Für openGL muss es auf normalisierte Gerätekoordinaten (-1 bis 1) projizieren, damit es von -Breite / 2 bis Breite / 2
skaliert
Sie sollten eine andere Frage zu PBR stellen, aber hier ist eine gute Ressource: learnopengl.com/#!PBR/Theory
Alan Wolfe
@ Mikeglaz Ich habe, danke. Ich würde sagen, wenn Sie sich mit linearer Algebra und High-School-Optik auskennen, geht es Ihnen gut. Alle Einzelheiten, die Sie noch nicht verstehen, haben Sie bereits die Grundlage, um sie zu verstehen, indem Sie die entsprechende Wikipedia-Seite lesen.
Dan Hulme