![Page 1: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/1.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU
(3) Rasterisierung
Vorlesung„Computergraphik I“
S. Müller
![Page 2: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/2.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU
Rasterisierung
![Page 3: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/3.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 3 -
Wiederholung I Trigonometrie
sin, cos, tan Fläche im Dreieck
Lineare Algebra Punkte und Vektoren Betrag, Normierung Skalarprodukt
• Ergebnis ist Skalar• Winkel zw. 2 Vektoren• Projektion auf
Einheitsvektor
Kreuzprodukt• Ergebnis ist Vektor• Winkel zwischen 2
Vektoren• Normale zu 2 Vektoren
Rechts-, Linkssystem
![Page 4: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/4.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 4 -
Beispiel I
=001
x
=010
y
=100
z x
z
y
=× yx
z=
=
×
=
100
010
001
=× xy
z−=
−=
×
=
100
001
010
=× xx
=
×
=
000
001
001
z ?
![Page 5: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/5.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 5 -
Beispiel II Fläche in einem Dreieck
αsin21 ⋅⋅⋅= baA α
a
b C
A B
αsin⋅⋅=×= babac
c
baA ×⋅=
21 c ?
![Page 6: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/6.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 6 -
3D-Koordinatensysteme
x
yz
x
yz
Linke-Hand-System(Linkssystem)
Rechte-Hand-System(Rechtssystem)
![Page 7: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/7.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 7 -
Kreuzprodukt
bac ×=
ab
α
bac ×=
ab
α
Linke-Hand-System Rechte-Hand-System
![Page 8: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/8.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 8 -
Beispiel 1 Ein Polygon ist (oft) gegeben durch eine Liste seiner
3D-Eckpunkte, die gegen den Uhrzeigersinn eingetragen werden, wenn man von oben/draußen darauf blickt
Berechne die normierte Normale auf das Polygon in einem Rechtssystem
A
ED
C
B
ABABb
−==aAEAEa −==
b
abn ×=
n
nnn
=0
![Page 9: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/9.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 9 -
Beispiel 1: Probleme Diese Normalenberechnung ist nur korrekt wenn
Flächen „planar“ Flächen konvex Punkte nicht kolinear
a
nA
ED
C
B
AE
DC
b
BPunkte nicht in einer Ebene Konkave Fläche
![Page 10: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/10.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 10 -
Konvex/Konkav Konvex heißt, daß die
Verbindung zweier Punkte vollständig innerhalb der Fläche liegt
Analog: Innenwinkel nicht größer als 180°
konkav
konvex
Eselsbrücke konkav: man kann Kaffee drauf schütten
![Page 11: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/11.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 11 -
Beispiel 2: Polygone mit Löchern Wie mache ich ein Loch in
ein Polygon? Doppelte Hilfskante … auch nur ein konkaves
Polygon
A
D C
B
H G
E F
P = {A, B, C, D, A, E, H, G, F, E}
Grundlegende Datenstruktur in den meisten Graphiksystemen sind daher Dreiecke 3 Punkte liegen immer in einer Ebene Normale ist eindeutig Problem: Triangulierung
![Page 12: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/12.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 12 -
Beispiele: Dreiecksmodelle
![Page 13: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/13.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 13 -
Gerade
Durch 2 (nicht-identische) Punkte A und B wird eine Gerade aufgespannt
Jeder Punkt X auf der Geraden ist gegeben durch:
Jeder Punkt auf der Kante (edge) zwischen A und B liegt im Parameterbereich t ∈ [0, 1]
Ein Strahl von A in Richtung B liegt im Bereich t ∈ [0, ∞[
ABABv −==
vtAX ⋅+=
A Bv
![Page 14: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/14.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 14 -
Lineare Interpolation
Jeder Punkt auf der Gerade lässt sich also auch darstellen durch
Dies entspricht einer „linearen Interpolation“: t = 0: Punkt A t = 1; Punkt B t∈[0, 1]; „t mal B und den Rest von A“
Eignet sich z.B. auch zur Interpolation von Farben an den Eckpunkten
ABABv −==
vtAX ⋅+=
( ) AtBtX ⋅−+⋅= 1
A Bv
( )ABtAX −⋅+=
AtBtAX ⋅−⋅+=( ) AtBtX ⋅−+⋅= 1
![Page 15: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/15.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 15 -
Zusammenfassung
Gerade
Parameterdarstellung
Lineare Interpolation
ABABv −==
A Bv
vtAX ⋅+=
( ) AtBtX ⋅−+⋅= 1
![Page 16: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/16.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 16 -
A
B
C
Ebenen/Dreiecke Durch 3 Punkte wird eine
Ebene aufgespannt Parameterdarstellung:
Normalform
ABu = ACv =
XA
B
C
u
v
vtusAX ⋅+⋅+=
vuvun
××=°
0=°nAX
°n
X
1);1,0(, ≤+∈ tsts (für Dreieck)
![Page 17: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/17.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 17 -
Normalform I
Interpretation: Gerade durch den Ursprung
in Richtung n Jeder Punkt X ist dann ein
Punkt der Ebene, wenn er auf diese Gerade projiziert den gleichen Abstand vom Ursprung hat, wie die Projektion von A.
0=°nAX
( ) 0=°− nAX
( ) ( ) 0=°−° nAnX
A
B
C°n
X
O
A X
![Page 18: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/18.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 18 -
Normalform II
A
B
C°n
X
( ) 0=°−⋅+⋅+⋅ nAnznynx zyx
0=+⋅+⋅+⋅ dnznynx zyx
( )°−= nAd
O
A
d
=zyx
X
=°
z
y
x
nnn
n
( ) ( ) 0=°−° nAnX
d beschreibt den (kürzesten) Abstand der Ebene vom Ursprung
Das Vorzeichen gibt Auskunft über die Lage des Urpungs zur Ebene d=0: Ursprung Teil der Ebene d>0: Ursprung im vorderen Halbraum d<0: Ursprung im hinteren Halbraum
![Page 19: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/19.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 19 -
Normalform III Typische Schreibweise für
Ebenengleichung
Wobei a, b, c die Komponenten der (normierten) Normalen sind und d den Abstand der Ebene vom Ursprung bezeichnet
Oft sinnvoll: die 4 Parameter a,b,c,d in die Datenstruktur für das Dreieck aufnehmen, da sie dann nicht immer neu berechnet werden müssen
Einsetzen eines beliebigen Punktes
P ist Teil der Ebene
P liegt im hinteren Halbraum
P liegt im vorderen Halbraum
0=+⋅+⋅+⋅ dzcybxa
0=+⋅+⋅+⋅ dpcpbpa zyx
0<+⋅+⋅+⋅ dpcpbpa zyx
0>+⋅+⋅+⋅ dpcpbpa zyx
=
z
y
x
ppp
P
![Page 20: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/20.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 20 -
Beispiel Berechnen sie die
Ebenengleichung der oberen Würfelfläche
x
z
y
)0,0,0(
)2,2,2(
==010
yn ( )2,2,2=A
0=°nAX
( ) 0=°− nAX
0010
222
=
−
zyx
00)2(1)2(0)2( =⋅−+⋅−+⋅− zyx
02 =−y
2=y
![Page 21: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/21.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 21 -
Rastergraphik Auf der Graphikkarte haben
wir einen eigenen Bildspeicher
Hier „schreiben“ wir unsere Bilder rein
Ein Digital/Analog-Wandler liest diesen periodisch aus und wandelt den Inhalt in das Bildsignal für den Monitor um.
Typisches Format: 3 Byte pro Pixel (r,g,b)
Bildspeicher
AD/Wandler
![Page 22: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/22.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 22 -
Beispiele Wir haben einen Bildschirm von 1024x768 Pixeln und
je 1 Byte für r, g und b Wieviele Farbe können wir darstellen?
Wie groß muss der Bildspeicher sein?
Bei einer Bildwiederholrate von 60 Hz, wie lange ist jedes Bild sichtbar?
216.777.16256256256 =⋅⋅
ByteByte 296.359.237681024 =⋅⋅
msekseksek 16016,0601 ≈=
![Page 23: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/23.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 23 -
CRT (Kathodenstrahlröhre)
![Page 24: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/24.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 24 -
Flachbildschirme
![Page 25: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/25.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 25 -
TFT (Thin Film Transistor)/LCD
Liegt Spannung an, also unter Einwirkung eines elektrischen Feldes, sind die Flüssigkristalle gerade ausgerichtet. Das polarisierte Licht wird am zweiten Polarisationsfilter absorbiert. Damit kann das Licht an dieser Stelle des TFT Bildschirms nicht austreten.
Für jedes Pixel 3mal (rgb)
![Page 26: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/26.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 26 -
Pixel Wir haben Ausgabegeräte mit
endlicher, fester Auflösung und damit ein festes Raster
Bildpunkte werden „Pixel“ genannt für „picture element“
In Wirklichkeit ist ein Pixel kein fester Punkt, sondern eine Fläche
Rasterisierung: Wir nähern z.B. eine Linie durch
„Flächen“ an Problem der Unterabtastung
(englisch: „aliasing“) führt zu gezackten Strukturen (speziell bei schrägen Linien)
![Page 27: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/27.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU
C++ kompakt - Teil 2
Matthias Biedermann(Dank an Markus Geimer)
![Page 28: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/28.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 28 -
Wiederholung Organisation von Projekten in
Definitionsdateien (.h) Implementierungsdateien
(.cpp, .cxx) Startpunkt der Ausführung:
main-Funktion Vor der Benutzung einer
Klasse/Funktion, einbinden der Definitionsdatei mit #include “name” #include <name>
Vermeiden von Mehrfach-Includes durch
#ifndef SYMBOL #define SYMBOL // Inhalt der // Definitionsdatei #endif
oder
#pragma once
![Page 29: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/29.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 29 -
Wiederholung (2) Klassendefinition:
class Name{ public: [...] protected: [...] private: [...]};
Methoden-Implementierung:Typ Name::Methode(Params){ [...]}
Konstruktoren: Kein Rückgabewert Name identisch mit
Klassenname
Ein-/Ausgabe mit Streams Vordefiniert:
cin, cout, cerr, clog Verwendet die Operatoren
<< und >> Sind definiert im
Systemheader iostream, im Namensraum std
![Page 30: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/30.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 30 -
Destruktoren Ein Destruktor ist das Gegenstück zu einem Konstruktor. Er wird
automatisch für jedes Objekt am Ende seiner Lebensdauer auf-gerufen.
Ein Destruktor ist immer parameterlos und besitzt ebenfalls keinen Rückgabewert. Sein Name setzt sich aus dem Klassen-namen und einer vorangestellten Tilde zusammen.
Beispiel:Vector2D::~Vector2D(){ // Bei Vector2D ist nichts freizugeben!}
Destruktoren sollten immer dann verwendet werden, wenn in einer Klasse Member-Variablen dynamisch angelegt werden. Anderenfalls wird der reservierte Speicher nie freigegeben!
![Page 31: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/31.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 31 -
Referenzen “Eine Referenz ist ein alternativer Name für ein Objekt.” Vorstellung: Eine Referenz ist ein (nicht veränderbarer) Zeiger
auf ein Objekt, der bei jeder Benutzung dereferenziert wird. Damit eine Referenz immer an ein Objekt gebunden ist, muss
man sie zwingend initialisieren. Beispiel:
int x = 17;int& xr = x;int y = x; // y = 17int z = xr; // z = 17, da xr Synonym für x
Anwendung: Call-by-reference
![Page 32: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/32.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 32 -
Beispiel Aufrufsequenz:
int a = 2;doMagic(a);
Call-by-value:
void doMagic(int x) { x = 5; // x ist lokale Kopie, a unverändert}
Call-by-reference:void doMagic(int& x) { x = 5; // a = 5, da x hier Synonym für a}
Bei großen Objekten kann das Anlegen einer lokalen Kopie für Call-by-value sehr teuer werden! � Referenzen einsetzen
![Page 33: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/33.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 33 -
Automatisch erzeugte Methoden Definiert der Programmierer keinen eigenen Konstruktor, dann
erzeugt der Compiler implizit einen leeren Default-Konstruktor (ohne Parameter).
Ein leerer Destruktor wird ebenfalls automatisch erzeugt. Der sog. Kopier-Konstruktor (hier am Beispiel der Vector2D-
Klasse)
Vector2D(Vector2D& value);initialisiert die Instanz mit einer 1:1-Kopie des Objektes value (Vorsicht bei dynamisch erzeugten Member-Variablen!).
Dazu kommt der Zuweisungsoperator =, der die Daten der Objektes auf der rechten Seite 1:1 in das Objekt auf der linken Seite kopiert (Nochmal Vorsicht!).
![Page 34: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/34.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 34 -
Überladen von Funktionen In C++ ist es möglich Funktionen zu definieren, die sich nur in der
Anzahl bzw. den Typen der Parameter unterscheiden (overloading).� Unterscheidung nur durch den Rückgabetyp reicht jedoch nicht!
Beispiel:float sqrt(float value);double sqrt(double value);
Bei einem Aufruf wird anhand der realen Parameter entschieden, welche Variante auszuführen ist:
float f = 3.14159f;double d = 2.71828;float x = sqrt(f); // Ruft float-Variante aufdouble y = sqrt(d); // Ruft double-Variante auf
![Page 35: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/35.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 35 -
Überladen von Operatoren Es ist auch möglich, die Operatoren für eigene Datentypen zu
überladen. Man kann jedoch weder neue Operatoren definieren, noch die Funktionsweise für elementare Typen abändern.
Beispiel:
Vector2D operator +(Vector2D& a, Vector2D& b) { Vector2D result; result.mElement[X] = a.x() + b.x(); result.mElement[Y] = a.y() + b.y(); return result;}
Wichtig: “+=“ ist ein eigener Operator. Durch Überladen von “+“ wird er nicht automatisch definiert.
![Page 36: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/36.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 36 -
Eine gute Lösung... (1)
Vector2D& Vector2D::operator +=(const Vector2D& rhs){ mElement[X] += rhs.mElement[X]; mElement[Y] += rhs.mElement[Y]; return *this;}
Zuweisungen habenin C++ auch einErgebnis!
Nur die Referenzübergeben und keineKopie erzeugen.
rhs wird nichtverändert, istalso konstant.
Innerhalb der Klassehat man direkten Zugriffauf alle Attribute. Auchauf die als Parameterübergebener Objekte.
![Page 37: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/37.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 37 -
Eine gute Lösung... (2)
const Vector2D operator +(const Vector2D& lhs, const Vector2D& rhs){ return Vector2D(lhs) += rhs;}
Frage: Warum ist der Ergebnistyp ein const Vector2D ?� Sonst wäre auch a+b = c; möglich (grober Unfug)!
Nur die Referenzenübergeben und keineKopien erzeugen.
rhs und lhs werdennicht verändert, sindalso konstant.
Erzeuge eine temporäreInstanz, initialisiere sie mitdem Inhalt von lhs undaddiere darauf rhs.
![Page 38: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/38.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 38 -
Beispiel#include <iostream>#include “Vector2D.h”
using namespace std;
int main() { Vector2D a(1, 2); Vector2D b(7, 5);
Vector2D c = a + b;
cout << “Ergebnis: (“ << c.x() << “,” << c.y() << “)” << endl;
return 0;}
![Page 39: Vorlesung „Computergraphik I“ S. Müllercg/ws1213/cg1/vorlesung/03_rasterisierung.pdf · Ein Polygon ist (oft) gegeben durch eine Liste seiner 3D-Eckpunkte, die gegen den Uhrzeigersinn](https://reader030.vdocuments.us/reader030/viewer/2022040311/5d62709488c993362b8ba606/html5/thumbnails/39.jpg)
U N I V E R S I T Ä TKOBLENZ · LANDAU S. Müller - 39 -
Anmerkungen Durch die Implementierung von operator + auf der Basis von
operator += muss nur noch eine Operator-Implementierung gepflegt werden.
Operatoren sollten ‘erwartungskonform’ sein. Beispiel:Die Multiplikation eines Vektors mit einem Skalar ist kommutativ. Daher sollte man hierfür zwei Operatoren überladen.const Vector2D operator *(float s, const Vector2D& v);const Vector2D operator *(const Vector2D& v, float s);