Warum werden in der Computergrafik homogene Koordinaten verwendet?


Antworten:


12

Sie vereinfachen und vereinheitlichen die in Grafiken verwendete Mathematik:

  • Sie ermöglichen es Ihnen, Übersetzungen mit Matrizen darzustellen.

  • Sie ermöglichen es Ihnen, die Unterteilung durch Tiefe in perspektivischen Projektionen darzustellen.

Der erste bezieht sich auf die affine Geometrie. Die zweite bezieht sich auf die projektive Geometrie.


Nach was für Beispielen suchen Sie? Übersetzungsmatrizen und alles, was mit perspektivischen Projektionen zu tun hat, sollte einfach genug sein, um nachzuschlagen?
Bart

@ Bart, Analogie benötigt.

2
Es tut mir auch leid, aber das sagt mir eigentlich nichts. Sie müssen mehr Wörter verwenden, um zu erklären, wonach Sie genau suchen.
Bart

Ich denke, diese Antwort wird nicht so hoch bewertet, weil sie für uns Neulinge zu technisch ist. Vielleicht würde ein einfaches Beispiel mit einfacher Formulierung die Prinzipien besser veranschaulichen
Frank

5

Es ist im Namen: Homogene Koordinaten sind gut ... homogen. Homogen zu sein bedeutet eine einheitliche Darstellung von Rotation, Translation, Skalierung und anderen Transformationen.

Eine einheitliche Darstellung ermöglicht Optimierungen. 3D-Grafikhardware kann darauf spezialisiert sein, Matrixmultiplikationen auf 4x4-Matrizen durchzuführen. Es kann sogar darauf spezialisiert sein, Multiplikationen mit 0 oder 1 zu erkennen und zu speichern, da diese häufig verwendet werden.

Wenn keine homogenen Koordinaten verwendet werden, kann es schwierig werden, die stark optimierte Hardware in vollem Umfang zu nutzen. Unabhängig davon, welches Programm erkennt, dass optimierte Anweisungen der Hardware verwendet werden können (normalerweise ein Compiler, manchmal sind die Dinge jedoch komplizierter), damit homogene Koordinaten für andere Darstellungen nur schwer optimiert werden können. Es werden weniger optimierte Anweisungen ausgewählt und somit das Potenzial der Hardware nicht genutzt.

Da gab es Aufrufe für Beispiele: Sony PS4 kann massive Matrixmultiplikationen durchführen. Es ist so gut, dass es für einige Zeit ausverkauft war, weil Cluster von ihnen anstelle von teureren Supercomputern verwendet wurden. Sony forderte daraufhin, dass ihre Hardware nicht für militärische Zwecke verwendet werden dürfe. Ja, Supercomputer sind militärische Ausrüstung.

Es ist für Forscher durchaus üblich geworden, Grafikkarten zu verwenden, um ihre Matrixmultiplikationen zu berechnen, selbst wenn keine Grafik beteiligt ist. Ganz einfach, weil sie in ihrer Größe besser sind als Allzweck-CPUs. Zum Vergleich haben moderne Mehrkern-CPUs in der Größenordnung von 16 Pipelines (x0,5 oder x2 spielt keine Rolle), während GPUs in der Größenordnung von 1024 Pipelines liegen.

Es sind nicht so sehr die Kerne als die Pipelines, die eine tatsächliche Parallelverarbeitung ermöglichen. Kerne bearbeiten Threads. Themen müssen explizit programmiert werden. Pipelines arbeiten auf Befehlsebene. Der Chip kann Befehle mehr oder weniger von selbst parallelisieren.


"Sonys PS4 kann massive Matrixmultiplikationen durchführen." Du meinst den Cell Prozessor der PS3, oder? Die PS4 hat einen eher gewöhnlichen x86-Prozessor.
Wumpf

Obwohl dies eine gute Antwort ist, glaube ich nicht, dass sie die Frage des OP beantwortet, und legt nahe, dass homogene Koordinaten verwendet werden, da die Hardware dafür optimiert ist. Homogene Koordinaten sind jedoch nützlicher, und es wurde schließlich Hardware dafür entwickelt. Ein weiteres Argument für vec4s ist, dass sie auf 128-Bit ausgerichtet sind, was das Lesen auf Wide Memory Bussen (GPUs) effizienter macht
PaulHK

4

ergänzen:

homogene Koordinaten erlauben auch die Darstellung von Unendlichkeit: in 3D, dh der Punkt im Unendlichen in Richtungx,y,z. Typischerweise können Lichtquellen an endlicher oder unendlicher Position auf die gleiche Weise dargestellt werden.(x,y,z,0)=x,y,z0x,y,z

Über die Perspektiventransformation ist es sogar möglich, ohne perspektivische Verzerrung korrekt zu interpolieren (im Gegensatz zu früherer Grafikhardware auf dem PC).


2

Aus persönlichen Gründen habe ich (wenn möglich) auf die Verwendung homogener Koordinaten verzichtet und die einfache kartesische Formulierung bevorzugt.

Der Hauptgrund ist die Tatsache, dass homogene Koordinaten 4 triviale Einträge in den Transformationsmatrizen (0, 0, 0, 1) verwenden, was unnötiges Speichern und Berechnen mit sich bringt (auch der Overhead von Allzweck-Matrixberechnungsroutinen, die "standardmäßig" in verwendet werden dieser Fall).

Der Nachteil ist, dass Sie beim Schreiben der Gleichungen mehr Sorgfalt benötigen und die Unterstützung der Matrixtheorie verlieren, aber bisher habe ich überlebt.


1
Grundsätzlich können Datentypen implementiert werden, die diese Einträge nicht tatsächlich speichern, obwohl sie sich so verhalten, wie sie es tun.

1
@ Hurkyl Offensichtlich. Dies wird selten durchgeführt, da allgemeine Matrix-Toolboxen zur Verfügung stehen.
Yves Daoust,

@YvesDaoust Können Sie ein Beispiel für plain Cartesian formulationeine Ressource oder einen Link zu einer Ressource bereitstellen , die deren Verwendung in 3D-Grafiken beschreibt?
Dan

@Dan: Verwenden Sie y = Ax + b, wobei A eine 3x3-Matrix und ba ein 3x1-Vektor ist, anstelle von y '= Ax', wobei y ', x' erweiterte Vektoren sind, und A eine 4x4-Matrix.
Yves Daoust

@YvesDaoust Sie übergeben also anstelle einer 4x4-Matrix eine 3x3-Matrix und einen 3x1-Vektor an Ihre Shader? Wo rechnen und lagern Sie w?
Dan

2

[xy]
[uv]=[cos(θ)sin(θ)sin(θ)cos(θ)][xy]
[uv]=[k100k2][xy]
[uv]=[xy]+[st]

Sei R und S Rotations- und Skalierungsmatrizen und T ein Translationsvektor. In der Computergrafik müssen Sie möglicherweise eine Reihe von Übersetzungen bis zu einem bestimmten Punkt ausführen. Sie könnten sich vorstellen, wie schwierig das werden könnte.

p=SR(Sp+T)+T

M=TSRTS
p=Mp

p=[xy1]
R=[cos(θ)sin(θ)0sin(θ)cos(θ)0001]
S=[k1000k20001]
T=[10t101t2001]

p=[xyw]
Q=[1000010000100010]

1

Berechnungen in affinen Koordinaten erfordern oft Divisionen, die im Vergleich zu Additionen oder Multiplikationen teuer sind. Bei der Verwendung von projektiven Koordinaten muss man normalerweise nicht teilen.

Durch die Verwendung von projektiven Koordinaten (und generell der projektiven Geometrie) werden auch Sonderfälle eliminiert, wodurch alles einfacher und einheitlicher wird.


"Berechnungen in affinen Koordinaten erfordern oft Teilungen": Ich verstehe nicht warum. Tatsächlich berechnen Sie genau die gleichen Ausdrücke.
Yves Daoust

@Yves: Ich antworte auf das allgemeinere Thema "Verwendung in Computergrafiken" und nicht auf die spezielle Frage "Computermatrixtransformationen".

@Hurkyl: Ich auch. Wenn Sie eine Szene rendern, berechnen Sie genau die gleichen Ausdrücke mit der gleichen Anzahl von Unterteilungen (der Unterschied liegt in Dummy-Begriffen mit einem 0-Faktor).
Yves Daoust

@ Yves: Hrm. Ich bin es gewohnt, Berechnungen durchzuführen, bei denen die Konvertierung zurück in affine bis zu einem gewissen Grad verschoben werden kann. Ich werde auf Ihr Fachwissen verzichten, wenn Sie sagen, dass dies nicht oft vorkommt.

-1
  • einfachere Formeln
  • Weniger Sonderfälle
  • Vereinigung und
  • Dualität

2
Die Antwort ist sehr unklar. Sie sollten auf jeden Punkt näher eingehen.
Rotem
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.