Advanced Computer Graphics 6. Übung€¦ · 3D Rendering in OpenGL 3.x. M.Sc. Tristan Nauber...

17
M.Sc . Tristan Nauber Advanced Computer Graphics: Übung 6 1 20 18 - 10 - 11 Advanced Computer Graphics 6 . Übung

Transcript of Advanced Computer Graphics 6. Übung€¦ · 3D Rendering in OpenGL 3.x. M.Sc. Tristan Nauber...

Page 1: Advanced Computer Graphics 6. Übung€¦ · 3D Rendering in OpenGL 3.x. M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 3 2018-10-11 Transformationsmatrizen • Definition

M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 12018-10-11

Advanced Computer Graphics6. Übung

Page 2: Advanced Computer Graphics 6. Übung€¦ · 3D Rendering in OpenGL 3.x. M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 3 2018-10-11 Transformationsmatrizen • Definition

M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 22018-10-11

Gliederung

1. Wiederholung: Transformationen mittels Matrizen

2. Model-View-Projection Transformationen

3. Implementierung mit C-OpenGL-API

3D Rendering in OpenGL 3.x

Page 3: Advanced Computer Graphics 6. Übung€¦ · 3D Rendering in OpenGL 3.x. M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 3 2018-10-11 Transformationsmatrizen • Definition

M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 32018-10-11

Transformationsmatrizen

• Definition für kartesische 3D-Koordinaten• Formulierung mancher Transformationen als Matrizen nicht möglich bei kartesischen

Koordinaten (Translation, Projektion) verwenden homogene Koordinaten:

− Äquivalent zu kartesischer 3D-Position:

𝑥𝑥𝑦𝑦𝑧𝑧1

− Richtungsvektor:

𝑥𝑥𝑦𝑦𝑧𝑧0

− Normalisierung auf kartesische Position:

𝑥𝑥𝑦𝑦𝑧𝑧𝑤𝑤

𝑥𝑥/𝑤𝑤𝑦𝑦/𝑤𝑤𝑧𝑧/𝑤𝑤

1

,𝑤𝑤 ≠ 0

3D Rendering in OpenGL 3.x

Page 4: Advanced Computer Graphics 6. Übung€¦ · 3D Rendering in OpenGL 3.x. M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 3 2018-10-11 Transformationsmatrizen • Definition

M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 42018-10-11

Transformationsmatrizen

• Translation:1 00 1

0 ∆𝑥𝑥0 ∆𝑦𝑦

0 00 0

1 ∆𝑧𝑧0 1

𝑥𝑥𝑦𝑦𝑧𝑧1

=

𝑥𝑥 + ∆𝑥𝑥𝑦𝑦 + ∆𝑦𝑦𝑧𝑧 + ∆𝑧𝑧

1

Verschiebung mit Vektor

∆𝑥𝑥∆𝑦𝑦∆𝑧𝑧0

• Rotation:𝑐𝑐𝑜𝑜𝑜𝑜𝛼𝛼 0

0 1𝑜𝑜𝑖𝑖𝑖𝑖𝛼𝛼 0

0 0−𝑜𝑜𝑖𝑖𝑖𝑖𝛼𝛼 0

0 0𝑐𝑐𝑜𝑜𝑜𝑜𝛼𝛼 0

0 1

𝑥𝑥𝑦𝑦𝑧𝑧1

=

𝑐𝑐𝑜𝑜𝑜𝑜𝛼𝛼 𝑥𝑥 + 𝑜𝑜𝑖𝑖𝑖𝑖𝛼𝛼 𝑧𝑧𝑦𝑦

−𝑜𝑜𝑖𝑖𝑖𝑖𝛼𝛼 𝑥𝑥 + 𝑐𝑐𝑜𝑜𝑜𝑜𝛼𝛼 𝑧𝑧1

Rotation um y-Achse mit Winkel 𝛼𝛼

• Skalierung:𝑜𝑜𝑥𝑥 00 𝑜𝑜𝑦𝑦

0 00 0

0 00 0

𝑜𝑜𝑧𝑧 00 1

𝑥𝑥𝑦𝑦𝑧𝑧1

=

𝑜𝑜𝑥𝑥𝑥𝑥𝑜𝑜𝑦𝑦𝑦𝑦𝑜𝑜𝑧𝑧𝑧𝑧1

Skalierung mit (𝑜𝑜𝑥𝑥, 𝑜𝑜𝑦𝑦 , 𝑜𝑜𝑧𝑧)

3D Rendering in OpenGL 3.x

Page 5: Advanced Computer Graphics 6. Übung€¦ · 3D Rendering in OpenGL 3.x. M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 3 2018-10-11 Transformationsmatrizen • Definition

M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 52018-10-11

Transformationsmatrizen

• Orthogonalprojektion:1 00 1

0 00 0

0 00 0

0 00 1

𝑥𝑥𝑦𝑦𝑧𝑧1

=

𝑥𝑥𝑦𝑦01

• Zentralperspektivische Projektion:1 00 1

0 00 0

0 00 0

1 0−1 0

𝑥𝑥𝑦𝑦𝑧𝑧1

=

𝑥𝑥𝑦𝑦𝑧𝑧−𝑧𝑧

𝑥𝑥/−𝑧𝑧𝑦𝑦/−𝑧𝑧−11

3D Rendering in OpenGL 3.x

Page 6: Advanced Computer Graphics 6. Übung€¦ · 3D Rendering in OpenGL 3.x. M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 3 2018-10-11 Transformationsmatrizen • Definition

M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 62018-10-11

Transformationsmatrizen

• Da Assoziativität bei Matrizenmultiplikationen gilt beliebige Transformationen in einer Matrix vereinbar

• Bspw. Translation und Skalierung:1 00 1

0 ∆𝑥𝑥0 ∆𝑦𝑦

0 00 0

1 ∆𝑧𝑧0 1

𝑜𝑜𝑥𝑥 00 𝑜𝑜𝑦𝑦

0 00 0

0 00 0

𝑜𝑜𝑧𝑧 00 1

𝑥𝑥𝑦𝑦𝑧𝑧1

=

𝑜𝑜𝑥𝑥 00 𝑜𝑜𝑦𝑦

0 ∆𝑥𝑥0 ∆𝑦𝑦

0 00 0

𝑜𝑜𝑧𝑧 ∆𝑧𝑧0 1

𝑥𝑥𝑦𝑦𝑧𝑧1

=

𝑜𝑜𝑥𝑥𝑥𝑥 + ∆𝑥𝑥𝑜𝑜𝑦𝑦𝑦𝑦 + ∆𝑦𝑦𝑜𝑜𝑧𝑧𝑧𝑧 + ∆𝑧𝑧

1

• VORSICHT: Kommutativität gilt für gewöhnlich nicht:𝑜𝑜𝑥𝑥 00 𝑜𝑜𝑦𝑦

0 00 0

0 00 0

𝑜𝑜𝑧𝑧 00 1

1 00 1

0 ∆𝑥𝑥0 ∆𝑦𝑦

0 00 0

1 ∆𝑧𝑧0 1

𝑥𝑥𝑦𝑦𝑧𝑧1

=

𝑜𝑜𝑥𝑥 00 𝑜𝑜𝑦𝑦

0 𝑜𝑜𝑥𝑥∆𝑥𝑥0 𝑜𝑜𝑦𝑦∆𝑦𝑦

0 00 0

𝑜𝑜𝑧𝑧 𝑜𝑜𝑧𝑧∆𝑧𝑧0 1

𝑥𝑥𝑦𝑦𝑧𝑧1

=

𝑜𝑜𝑥𝑥𝑥𝑥 + 𝑜𝑜𝑥𝑥∆𝑥𝑥𝑜𝑜𝑦𝑦𝑦𝑦 + 𝑜𝑜𝑦𝑦∆𝑦𝑦𝑜𝑜𝑧𝑧𝑧𝑧 + 𝑜𝑜𝑧𝑧∆𝑧𝑧

1

Unterschiedliche Reihenfolge der Transformationen unterschiedliches Ergebnis

3D Rendering in OpenGL 3.x

Page 7: Advanced Computer Graphics 6. Übung€¦ · 3D Rendering in OpenGL 3.x. M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 3 2018-10-11 Transformationsmatrizen • Definition

M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 72018-10-11

Gliederung

1. Wiederholung: Transformationen mittels Matrizen

2. Model-View-Projection Transformationen

3. Implementierung mit C-OpenGL-API

3D Rendering in OpenGL 3.x

Page 8: Advanced Computer Graphics 6. Übung€¦ · 3D Rendering in OpenGL 3.x. M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 3 2018-10-11 Transformationsmatrizen • Definition

M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 82018-10-11

Model-View-Projection

• Gegeben

3D Rendering in OpenGL 3.x

z

x

y

Kamera

Kartesischer Raum

• Gesucht

2D-Projektives Rendering

Modell

Page 9: Advanced Computer Graphics 6. Übung€¦ · 3D Rendering in OpenGL 3.x. M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 3 2018-10-11 Transformationsmatrizen • Definition

M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 92018-10-11

Model-View-Projection

• Gegeben:− Modell als Vertices mit kartesischen 3D-Koordinaten und daraus definierten Dreiecken− Kamera (3D-Position, Ausrichtung), welche das Modell betrachtet

• Gesucht:− Rendering des Modells aus Sicht der Kamera Benötigen Abbildung von 3D-Vertexkoordinaten auf 2D-Kamerabildkoordinaten Transformierte Positionen sollten, sofern im Kamerablickfeld, im validen

Bildraumbereich liegen

• Verwenden Model-View-Projection-Transformationsprinzip:− Zuerst Transformation von Modellraum (gegebene Koordinaten) in Weltkoordinaten (Model)− Danach Transformation in Kameraraum, für einfachere Projektion (View)− Abschließend Projektion auf Kamerabildebene und Umrechnung in Bildraum (Projection)

3D Rendering in OpenGL 3.x

Page 10: Advanced Computer Graphics 6. Übung€¦ · 3D Rendering in OpenGL 3.x. M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 3 2018-10-11 Transformationsmatrizen • Definition

M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 102018-10-11

Model-View-Projection

• Model-Transformation in Weltkoordinaten:𝑇𝑇 𝑅𝑅 𝑆𝑆 𝑝𝑝𝑀𝑀 = 𝑀𝑀𝑝𝑝𝑀𝑀 = 𝑝𝑝𝑊𝑊

Fehlende Kommutativität:• Translation vor Rotation/Skalierung dezentralisiert diese Transformationen >

(meist negative Auswirkungen auf das Ergebnis)

3D Rendering in OpenGL 3.x

zx

y

zx

y

𝑆𝑆: 𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑖𝑖𝑆𝑆𝑆𝑆𝑆𝑆ng 𝑅𝑅:𝑅𝑅𝑜𝑜𝑅𝑅𝑆𝑆𝑅𝑅𝑖𝑖𝑜𝑜𝑖𝑖

zx

y

T:𝑇𝑇𝑆𝑆𝑆𝑆𝑖𝑖𝑜𝑜𝑆𝑆𝑆𝑆𝑅𝑅𝑖𝑖𝑜𝑜𝑖𝑖

zx

y

Modellraum Weltkoordinaten

Page 11: Advanced Computer Graphics 6. Übung€¦ · 3D Rendering in OpenGL 3.x. M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 3 2018-10-11 Transformationsmatrizen • Definition

M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 112018-10-11

Model-View-Projection

• View-Transformation in Kameraraum:𝑇𝑇𝑉𝑉𝑅𝑅𝑉𝑉 −1𝑝𝑝𝑊𝑊 = 𝑅𝑅𝑉𝑉−1𝑇𝑇𝑉𝑉−1𝑝𝑝𝑊𝑊 = 𝑉𝑉𝑝𝑝𝑊𝑊 = 𝑝𝑝𝑉𝑉

• Kameraraum: − Kamera sitzt im Ursprung (0,0,0) und hat− keine Rotation, d.h. ist nach (0,0,-1) ausgerichtet

• Grund:Kamerabildebenenprojektion sehr einfach zu formulieren (Abbildung auf Ebene parallel zur Kameraraum-x-y-Ebene)

3D Rendering in OpenGL 3.x

zx

y𝑇𝑇𝑉𝑉−1: 𝐼𝐼𝑖𝑖𝐼𝐼𝑆𝑆𝑆𝑆𝑜𝑜𝑆𝑆

𝐾𝐾𝑆𝑆𝐾𝐾𝑆𝑆𝑆𝑆𝑆𝑆𝑅𝑅𝑆𝑆𝑆𝑆𝑖𝑖𝑜𝑜𝑆𝑆𝑆𝑆𝑅𝑅𝑖𝑖𝑜𝑜𝑖𝑖𝑅𝑅𝑉𝑉−1: 𝐼𝐼𝑖𝑖𝐼𝐼𝑆𝑆𝑆𝑆𝑜𝑜𝑆𝑆𝐾𝐾𝑆𝑆𝐾𝐾𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑆𝑜𝑜𝑅𝑅𝑆𝑆𝑅𝑅𝑖𝑖𝑜𝑜𝑖𝑖

z

y

zx

y

Weltkoordinaten

Kamera

x

-z

Kameraraumkoordinaten

Page 12: Advanced Computer Graphics 6. Übung€¦ · 3D Rendering in OpenGL 3.x. M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 3 2018-10-11 Transformationsmatrizen • Definition

M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 122018-10-11

Model-View-Projection

• Projection-Transformation in GPU-Bildraum:− Bildebenenprojektion kann durch Projektionsmatrizen von Folie 5 erfolgen− Wie ist auf den GPU-Bildraum abzubilden?

• Feststellung: Kamera besitzt Sichtfeld (Frustum), Objekte außerhalb nicht sichtbar Frustum kann direkt auf Bildraum abgebildet werden, unter Definition des sichtbaren

Bereiches in allen Kameraraumrichtungen• Z-Richtung (Begrenzung durch Distanz): X-Y-Richtung (Begrenzung durch

Öffnungswinkel):

3D Rendering in OpenGL 3.x

Kamerafrustum

Far-Plane 𝑧𝑧𝑉𝑉 = −𝑓𝑓

Bildebene 𝑧𝑧𝑉𝑉 = −1Near-Plane 𝑧𝑧𝑉𝑉 = −𝑖𝑖

𝑧𝑧𝑠𝑠𝑠𝑠 = 1

𝑧𝑧𝑠𝑠𝑠𝑠 = −1Bildebene

𝑥𝑥𝑉𝑉 = −𝑅𝑅𝑆𝑆𝑖𝑖𝛼𝛼2

𝑥𝑥𝑠𝑠𝑠𝑠 = −1

𝛼𝛼

𝑥𝑥𝑉𝑉 = 𝑅𝑅𝑆𝑆𝑖𝑖𝛼𝛼2

𝑥𝑥𝑠𝑠𝑠𝑠 = 1

-z -z

Page 13: Advanced Computer Graphics 6. Übung€¦ · 3D Rendering in OpenGL 3.x. M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 3 2018-10-11 Transformationsmatrizen • Definition

M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 132018-10-11

Model-View-Projection

Erhalten perspektivische OpenGL-Projektionsmatrix aus Kombination von Zentralprojektionsmatrix mit Mapping von begrenztem Kameraraum auf Bildraum:

𝑜𝑜 00 𝑜𝑜 � 𝑆𝑆𝑜𝑜𝑝𝑝

0 00 0

0 00 0

𝑖𝑖 + 𝑓𝑓𝑖𝑖 − 𝑓𝑓

2𝑖𝑖𝑓𝑓𝑖𝑖 − 𝑓𝑓

−1 0

• Ohne Korrekturfaktor „asp“ kommt es zu unförmigen Objekten− In xy-Bildachsenrichtung wird ein Kameraraumbereich von [−𝑅𝑅𝑆𝑆𝑖𝑖 𝛼𝛼

2; 𝑅𝑅𝑆𝑆𝑖𝑖 𝛼𝛼

2] abgebildet

− Verhältnis der Achsenlänge zur jeweiligen Viewportdimension muss gleich sein Manipulieren Achsenlänge in y-Achsenrichtung Erzwingen Gleichheit dieses Verhältnisses für x- und y-Achse

3D Rendering in OpenGL 3.x

Viewport𝑜𝑜 =

1

𝑅𝑅𝑆𝑆𝑖𝑖 𝛼𝛼2

𝑆𝑆𝑜𝑜𝑝𝑝 =𝑤𝑤𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉ℎ𝑣𝑣𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉

𝑤𝑤𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉

ℎ𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉𝑉2𝑅𝑅𝑆𝑆𝑖𝑖

𝛼𝛼2

2𝑅𝑅𝑆𝑆𝑖𝑖𝛼𝛼2

Page 14: Advanced Computer Graphics 6. Übung€¦ · 3D Rendering in OpenGL 3.x. M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 3 2018-10-11 Transformationsmatrizen • Definition

M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 142018-10-11

Model-View-Projection

• Zusammenfassung der Transformationen ergibt die Model-View-Projection-Matrix:𝑃𝑃 𝑉𝑉 𝑀𝑀 𝑝𝑝𝑀𝑀 = 𝑋𝑋𝑀𝑀𝑉𝑉𝑀𝑀 𝑝𝑝𝑀𝑀 = 𝑝𝑝𝑆𝑆𝑆𝑆

• Beliebter Fehler:Mathematische Formulierung der Transformation in Sprechreihenfolge:𝑀𝑀 𝑉𝑉 𝑃𝑃 𝑝𝑝𝑀𝑀 = ? FALSCH! (Bitte nicht nachmachen)

Anwendung der Matrix 𝑋𝑋𝑀𝑀𝑉𝑉𝑀𝑀 auf alle Vertices eines Modells ergibt die notwendige Bildraumprojektion des Modells

Rasterisierer erzeugt Pixel aus projizierter Geometrie virtuelles Foto

3D Rendering in OpenGL 3.x

Page 15: Advanced Computer Graphics 6. Übung€¦ · 3D Rendering in OpenGL 3.x. M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 3 2018-10-11 Transformationsmatrizen • Definition

M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 152018-10-11

Gliederung

1. Wiederholung: Transformationen mittels Matrizen

2. Model-View-Projection Transformationen

3. Implementierung mit C-OpenGL-API

3D Rendering in OpenGL 3.x

Page 16: Advanced Computer Graphics 6. Übung€¦ · 3D Rendering in OpenGL 3.x. M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 3 2018-10-11 Transformationsmatrizen • Definition

M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 162018-10-11

OpenGL Implementierung

• Prinzipiell mehrere Möglichkeiten Modell in Bildraumkoordinaten zu transformieren:− Transformation aller Vertices im CPU-Speicher (vor dem Hochladen in OpenGL Puffer) Rendering äquivalent wie bisher, da Vertexpositionen bereits im Bildraum

− Transformation jedes Vertex im Vertex-Shader mittels der vorberechneten Matrix

• Sinnvollster Weg: Transformation im Vertex-Shader, da hochparallel, bessere Fließkommaperformanz,

weniger Bandbreitennutzung und flexibleres Rendering

• Da konstante MVP-Matrix für gesamtes Objekt Uniforms verwendbar

• Matrizenmultiplikation wird ohne weiteres von GLSL unterstützt

• Umrechnung von entstehendem homogenen Vektor in kartesische Koordinaten nicht notwendig automatisch vor Rasterisierung durch Hardwarefunktionalität (Perspective Divide)

3D Rendering in OpenGL 3.x

Page 17: Advanced Computer Graphics 6. Übung€¦ · 3D Rendering in OpenGL 3.x. M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 3 2018-10-11 Transformationsmatrizen • Definition

M.Sc. Tristan Nauber Advanced Computer Graphics: Übung 6 172018-10-11

Rendering in OpenGL 3.xOpenGL Implementierung

• Codebeispiel:− OpenGL Code:

GLfloat matrix[16] = getProjection() * getInverseView() * getModelTf();GLint loc = getUniformLocation(program, “mvp_matrix“);glUniformMatrix4fv(loc, 1, GL_FALSE, matrix);• Achtung: OpenGL erwartet Matrizen im „Column-Major“-Speicherlayout (Matrixspalten stehen

hintereinander im linearen Speicher

− GLSL Vertex-Shader Code:uniform mat4 mvp_matrix;layout(location = 0) in vec3 vertex_modelspace_position;void main(){

gl_Position = mvp_matrix * vec4(vertex_modelspace_position, 1);}