08 opengl pipeline [kompatibilitätsmodus]€¦ · bildschirm-(genauer „window“-) koordinaten,...
TRANSCRIPT
(8) OpenGL-Pipeline
VorlesungC t fik“„Computergrafik“
T. Grosch
yvpRTSTVMMMp
MODELVIEWPROJECTIONMM
LRPERSPORTHOv
44 344 21 K4444 34444 21
v ⋅⋅⋅⋅⋅⋅⋅⋅⋅= →'
uv yvxv
PROJECTIONM
xv0
AC
zv
zvAC
yvModell/Weltkoordinaten Kamerakoordinaten
yxv
-f (r,t) (1,1,1)yv xv
zv
-n zv
(l,b)(-1,-1,-1)
View Frustum Kanonisches Volumen
T. Grosch - 2 -
Viewport
Viewport-Transformationzv
yv yv
zv
Viewport-Transformation
(1,1,1)z
(1,1,1)
xv
(-1 -1 -1)
xv
(-1 -1 -1)( 1, 1, 1) (-1,-1,-1)
Transformation des kanonischen VolumensTransformation der xy-Koordinaten aus (-1 1) in dieTransformation der xy-Koordinaten aus (-1,1) in die Bildschirm- (genauer „Window“-) koordinaten, z.B. (0,599)x(0,599)Transformation der z-Koordinaten aus (-1,1) in den Bereich (0,1) für z-Buffer
T. Grosch - 4 -
Viewport Transformation (xy-Werte)Viewport Transformation (xy-Werte)yv
yv
höhez.B. Fenster der Größe 600x600 Pixel
1
zv
y
-1 1
xv00 breite
1
1
xv-1
-1
T. Grosch - 5 -
Bildschirmkoordinatensystemyv
BildschirmkoordinatensystemEin Bildschirmfenster der
(0;h-1) (b-1;h-1)
Ein Bildschirmfenster der Höhe h und der Breite b hat Pixelkoordinaten in x-Richtung von 0 bis b 1; in y
y = h-0.5
…
Richtung von 0 bis b-1; in y-Richtung von 0 bis h-1 Die Pixelkoordinaten sind die Mittelpunkte der quadratischen Pixel mit Kantenlänge 1
…g
(0;0) (b-1;0) xvx = -0.5 x = b-0.5
y = -0.5
T. Grosch - 6 -
Bildschirmkoord system OpenGLBildschirmkoord.system OpenGLOffset des Pixelmittelpunktes
yvOffset des Pixelmittelpunktes um 0.5
(0.5;h-0.5) (b-0.5;h-0.5)
y = h
…
…
(0 0 )(0.5;0.5) (b-0.5;0.5) xv0 x = b
T. Grosch - 7 -
Viewport in OpenGLViewport in OpenGL
yv
1yv
h/2yv y
h
1xv
-1 b/2xv
-b/2…
1 h/2
…
-1 -h/2
22' bb 1 1
xv0 b
22'22'
hphpbpbp
yy
xx
+⋅=+⋅=
0 bxp'1−=xp 1=xp
T. Grosch - 8 -
ViewportViewport
Es ist wichtig wie die Pixel nachher bei derEs ist wichtig, wie die Pixel nachher bei der Rasterisierung angesprochen werdenBei OpenGL:Bei OpenGL:
Das gesamte Clip-Volumen wird auf den darstellbaren Fensterbereich abgebildetVerwendet man Anti-Aliasing durch Subpixelstrukturen, so kommen keine „zusätzlichen“ Regionen dazu, die bereits weg-geclippt sind.g g pp
OpenGL
22' bpbp +⋅=
…
22'22
hphpbpbp
yy
xx
+⋅=+
…
T. Grosch - 9 -
Viewport: AllgemeinViewport: AllgemeinAngaben in hAngaben in FensterkoordinatenOpenGL-Kommando
lVi t( GLi t b h)
h
bglViewport( GLint x, y, b, h); (x, y) b
Viewport :
(0,0)hhxbpbp
Viewport
xx ++⋅=22'22'
:
( )11' += ppzv
1zv
2zv
1
yhphp yy ++⋅= 22'
( )12
+⋅= zz pp 1
-1
2
0
1
0
T. Grosch - 10 -
Viewport als MatrixViewport als MatrixViewportM
⎟⎟⎞
⎜⎜⎛ +
200
2xbb
Viewport
⎟⎟⎟
⎜⎜⎜
+2
02
022
yhh
⎟⎟⎟⎟
⎜⎜⎜⎜
21
2100
22
lVi (GLd bl b h)
⎟⎠
⎜⎝ 1000
22
glViewport(GLdouble x, y, b, h);
T. Grosch - 11 -
BeispielBeispiel
Viewport.c Viewport.exe
T. Grosch - 12 -
Typisches ProgrammTypisches Programmvoid display() void init(){
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); ...
{glClearColor( 0.0, 0.0, 0.0, 0.0);glEnable( GL_DEPTH_TEST);
}glutSwapBuffers();
}
void reshape( int w, int h)
void main( int argc, char **argv){
glutInit(&argc, argv);{
glViewport( 0, 0, w, h);glMatrixMode(GL_PROJECTION);glLoadIdentity();
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH);glutInitWindowSize(600,600);glutCreateWindow(„...");
gluPerspective(45, (float)w/h, 1.0, 20.0);
glMatrixMode(GL_MODELVIEW);
glutIdleFunc(idle);glutSpecialFunc(special);glutMouseFunc(mouse);
glLoadIdentity();}
glutMotionFunc(motion);glutReshapeFunc(reshape);glutKeyboardFunc(keyboard);glutDisplayFunc(display);g p y p yinit();glutMainLoop();
} T. Grosch - 13 -
OpenGL Rendering PipelineOpenGL Rendering PipelineKamera im Ursprung, Blickrichtung entlang
der negativen z Achse (Rechtssystem)der negativen z-Achse (Rechtssystem)
Linkssystem: z-Achse (noch) linear skaliert, kanonisches Volumen vor perspekt. Division
Linkssystem: z-Achse nicht-linear skaliert, kanonisches Volumen nach
perspektivischer Division: [-1,1]³
kanonisches Volumen vor perspekt. Division
12
pRTSTVp v44 344 21 K
v ⋅⋅⋅⋅⋅⋅='Bildschirm- bzw.
Fensterkoordinaten[0 b 1] x [0 h 1] x [0 1]
23
MODELVIEWM2
''' pMMMp LRPERSPORTHOv
4444 34444 21v ⋅⋅⋅= →
[0,b-1] x [0,h-1] x [0,1]4
PROJECTIONM
Division durch homogene Koordinate
Viewport-Transformation ''''' pMp Vi tvv ⋅=Viewport Transformation
T. Grosch - 14 -
pMp Viewport
Clipping
ClippingClippingWo?
-f
yv
-n(l,t)
( b)
yzv
(w,w,w) yv
(r,b)1xv(-w,-w,-w)
2
zv
(1,1,1)
2xv
(-1,-1,-1)
3
T. Grosch - 16 -
Problem mit Option 1Problem mit Option 1-f
-n(l,t)
Ebenengleichungen der Clippingebenen nicht so
(r,b)
Ebenengleichungen der Clippingebenen nicht so einfach zu bestimmen, bzw. Tests komplexer
T. Grosch - 17 -
Option 3?Option 3?yv
zvBestimmung der Ebenengleichungen der Clipebenen:z
(1,1,1)0
⎞⎛⎤⎡ ⎞⎛⎞⎛
=nAX vo
de C pebe e
xv
(-1,-1,-1)0101
011
=−⇒=⎟⎟⎟⎞
⎜⎜⎜⎛
⎥⎥⎤
⎢⎢⎡
⎟⎟⎟⎞
⎜⎜⎜⎛
−⎟⎟⎟⎞
⎜⎜⎜⎛
yyx
o
01 ⎟⎠
⎜⎝⎥
⎥⎦⎢
⎢⎣
⎟⎠
⎜⎝
⎟⎠
⎜⎝ z
0101
=−=−
yx
Ergebnis:
0101
=+=−
xz
Sieht einfach aus, aber…
0101
=+=+
zy
T. Grosch - 18 -
Problem mit Option 3Problem mit Option 3Unstetigkeit in der z-Transformation:
zp'
zz pnffnp −+='
Unstetigkeit in der z Transformation:
f
n+f z-Werte kleiner 0 werden auf z‘-Werte größer n+f „geflippt“, was
zpfn
f
n
Werte größer n f „geflippt , was Clipping schwierig macht.
zfn yv
zv
(1,1,1)
xv
(-1,-1,-1)
( , , )
A BA´
A´´Beispiel: Der Punkt A liegt vor der near-PlaneEigentlich sollte die Linie A´B gezeichnet werdenStattdessen wird die Linie A´´B gezeichnet ( )
T. Grosch - 19 -
Festlegung OpenGL: Option 2Festlegung OpenGL: Option 2
ClipebenenClipebenen
0)1 =−wx
yv
zv
0)30)20)1
==−=
wzwywx z
(w,w,w)2
0)50)40)3
=+=−
wxwz
6 1
0)60)5
=+=+
wzwy xv(-w,-w,-w)
6
(4D Raum hier etwas „vereinfacht“ dargestellt, da w nicht konstant…)
T. Grosch - 20 -
Festlegung OpenGL: Option 2Festlegung OpenGL: Option 2
ClipebenenClipebenen
0)1 =−wx
yv
zv
0)30)20)1
==−=
wzwywx z
(w,w,w)2
0)50)40)3
=+=−
wxwz
6 1
0)60)5
=+=+
wzwy xv(-w,-w,-w)
6
(4D Raum hier etwas „vereinfacht“ dargestellt, da w nicht konstant…)
T. Grosch - 21 -
Clipping Verfahren in 3DClipping Verfahren in 3D
Clipping Linie – kanonisches Volumen (Quader)Clipping Linie – kanonisches Volumen (Quader)Cohen-Sutherland (6 Bit)Schnittpunkt Gerade – Ebene, sonst praktisch gleichp p g
Clipping Polygon – kanonisches Volumen (Quader)Sutherland-HodgmanSchnittpunkt Gerade – Ebene, sonst ähnlich
T. Grosch - 22 -
OpenGL Rendering PipelineOpenGL Rendering PipelineKamera im Ursprung, Blickrichtung entlang
der negativen z Achse (Rechtssystem)der negativen z-Achse (Rechtssystem)Linkssystem: z-Achse (noch) linear skaliert, kanonisches Volumen vor perspekt. DivisionCli i
Linkssystem: z-Achse nicht-linear skaliert, kanonisches Volumen nach
perspektivischer Division: [-1,1]³
Clipping
pRTSTVp v44 344 21 K
v ⋅⋅⋅⋅⋅⋅='Bildschirm- bzw.
Fensterkoordinaten[0 b 1] x [0 h 1] x [0 1]
MODELVIEWM2
''' pMMMp LRPERSPORTHOv
4444 34444 21v ⋅⋅⋅= →
[0,b-1] x [0,h-1] x [0,1]
PROJECTIONM
Division durch homogene Koordinate
Viewport-Transformation ''''' pMp Vi tvv ⋅=Viewport Transformation
T. Grosch - 23 -
pMp Viewport
Materialien und Beleuchtung
Bisher: EckpunktfarbenBisher: Eckpunktfarben…
Änderungen pro Eckpunkt möglichÄnderungen pro Eckpunkt möglich
glBegin(GL POLYGON);glBegin(GL_POLYGON);glColor3f(0,0,1);glVertex3f(0,0,0);glVertex3f(0,0,0);glColor3f(0,0,1);glVertex3f(1,0,0);glColor3f(1,0,0);glVertex3f(.5,1,0);glEnd();glEnd();
T. Grosch - 25 -
BeleuchtungBeleuchtung
Ohne Beleuchtung wirken die Objekte sehr flachOhne Beleuchtung wirken die Objekte sehr flach, Formen sind schwer zu erkennenOpenGL verwendet klassisches Beleuchtungsmodell:OpenGL verwendet klassisches Beleuchtungsmodell:
allgemeines UmgebungslichtLichtquellen und Materialien mit
• Umgebungslicht (ambient)• diffuser Reflexion (diffuse)
i l d R fl i ( l )• spiegelnder Reflexion (specular)• Eigenausstrahlung von Materialien (emission)
T. Grosch - 26 -
Diffuse Oberfläche (Lambert )Diffuse Oberfläche (Lambert…)
In der Computergraphik werden Oberflächen-In der Computergraphik werden Oberflächen-materialien oft als „ideal diffus“ betrachtet.Egal von welcher Richtung man auf die Fläche sieht:Egal von welcher Richtung man auf die Fläche sieht: sie wirkt immer gleich hell.Beispiel: Blatt Papierp p
dM
T. Grosch - 27 -
Diffuse Oberfläche (Lambert )Diffuse Oberfläche (Lambert…)
Entscheidend ist aber der Einfallswinkel des LichtsEntscheidend ist aber der Einfallswinkel des Lichts
ϕϕ
M
ϕ
M
ϕ
MdM dM dM
Senkrechter Lichteinfall:Sehr hell
Waagrechter Lichteinfall:S h d k lSehr hell Sehr dunkel
T. Grosch - 28 -
Lambert-Gesetznv
Lambert-GesetzDie „sichtbare“ Fläche nimmt mit dem cos des Einfallswinkels ab: ϕ
ϕcos⋅A
cos des Einfallswinkels ab:
⎟⎞
⎜⎛
⎟⎞
⎜⎛ rr LM
ϕ
Aϕcos⋅
⎟⎟⎟
⎠⎜⎜⎜
⎝
⋅⎟⎟⎟
⎠⎜⎜⎜
⎝ b
g
b
g
LL
MM
ϕ: Winkel zwischen Oberflächen-Materialfarbe · Lichtfarbe · cosϕ
ϕ: Winkel zwischen Oberflächen-normalen und Lichteinfall
ϕ ϕ ϕ
dM dM dMdM dM dM
T. Grosch - 29 -
BemerkungBemerkungBei den Farben handelt es sich um rgb-Vektoren
⎞⎛⎞⎛ LMϕcos⋅
⎟⎟⎟⎞
⎜⎜⎜⎛⋅⎟⎟⎟⎞
⎜⎜⎜⎛
g
r
g
r
LL
MM
Die Multiplikation ist eine „komponentenweise“
⎟⎠
⎜⎝
⎟⎠
⎜⎝ bb LM
Multiplikation (Licht hat seine eigene Mathematik …)Beispiel:
Material rot, Licht 1 ist weiß (Resultat: rotes Licht)Material rot, Licht 2 ist grün (Resultat: schwarz)
T. Grosch - 30 -
Spiegelnder Term (Phong )Spiegelnder Term (Phong …)
Glanz/Spiegelung tritt entlang des reflektiertenGlanz/Spiegelung tritt entlang des reflektierten Lichtvektors aufBlickt man in die „Spiegelung“ des Lichtvektors, ist derBlickt man in die „Spiegelung des Lichtvektors, ist der Glanz sehr hell.
rr LM⎟⎞
⎜⎛
⎟⎞
⎜⎛
ψn
b
g
b
g
LL
MM cos⋅
⎟⎟⎟
⎠⎜⎜⎜
⎝
⋅⎟⎟⎟
⎠⎜⎜⎜
⎝
ψ n: Glanzzahlψ: Winkel zw. reflektiertemψ
Lichtstrahl und Blickrichtung
T. Grosch - 31 -
Glanzzahl ψ ψncosGlanzzahl ψcos
0=n 1=n0n
5=n 100=n
N = 5 N = 15
T. Grosch - 32 -
Phong-BeleuchtungsmodellPhong-BeleuchtungsmodellMaterialien bestehen ausMaterialien bestehen aus
Diffuser KomponenteSpiegelnder Komponente
Problem„Abgewandte“ Flächen sind schwarz
Lösung: Ambienter TermWird immer aufaddiertWird immer aufaddiert
( ) i
Lq
in
sidad LMMLML ⋅+⋅+⋅= ∑#
coscos ψϕ( )i∑=1
T. Grosch - 33 -
Phong-BeleuchtungsmodellPhong-Beleuchtungsmodell
( )Lq
n LMMLML ++∑#
All T (M L) i d b
( ) ii
in
sidad LMMLML ⋅+⋅+⋅= ∑=1
coscos ψϕ
Md: diffuse MaterialfarbeMs: spiegelnde MaterialfarbeL : ambiente Lichtfarbe
Alle Terme (M, L) sind rgb-FarbenFür den zu beleuchtenden La: ambiente Lichtfarbe
Li: Farbe der Lichtquelle in: Glanzahl
Oberflächenpunkt muss die Normale bekannt seinFreiheit: die MaterialfarbeFreiheit: die Materialfarbe kann von der spiegelnden Materialfarbe verschieden seinseinProblem: Die Summe aller Farben kann größer 1 werden.
T. Grosch - 34 -
OpenGL-BeleuchtungOpenGL-Beleuchtung( )∑ ⋅+⋅⋅+⋅+⋅+=
Lq
isin
sididiaaaae LMLMLMLMML#
,,, coscos ψϕ
Klassisches Beleuchtungsmodell
MaterialienEmissionsfarbe
( )∑=i 1
,,,
BeleuchtungsmodellViele Freiheiten
Die einzelnen Anteile werden
EmissionsfarbeAmbiente Reflexion(sfarbe)Diffuse Reflexion(sfarbe)
dann aufsummiert um die Farbe des Punktes zu erhalten
Spiegelnde Reflexion(sfarbe)Glanzzahl
Für jede LichtquelleWerte größer 1 werden auf 1 geclippt
Global
Für jede LichtquellePositionAmbiente Lichtfarbe
GlobalAmbiente Lichtfarbe
Diffuse LichtfarbeSpiegelnde Lichtfarbe
T. Grosch - 35 -
MaterialemissionMaterialemission
Emission dient zur Simulation selbstleuchtenderEmission dient zur Simulation selbstleuchtender Materialien, die allerdings keine anderen Objekte beleuchten. Die Emissionsfarbe wird einfach als Basishelligkeit genommen.Parameter: Emissionsfarbe Me
( )∑=
⋅+⋅⋅+⋅+⋅+=Lq
iisi
nsididiaaaae LMLMLMLMML
#
1,,, coscos ψϕ
T. Grosch - 36 -
Ambiente BeleuchtungAmbiente Beleuchtung
Simuliert gestreutes UmgebungslichtSimuliert gestreutes Umgebungslichtvöllig unabhängig von der GeometrieParameter: Ambiente Reflexion(sfarbe) Ma ambienteParameter: Ambiente Reflexion(sfarbe) Ma, ambiente Lichtfarbe La
Gibt es als globalen Wert und pro LichtquelleGibt es als globalen Wert und pro Lichtquelle( )∑
=
⋅+⋅⋅+⋅+⋅+=Lq
iisi
nsididiaaaae LMLMLMLMML
#
1,,, coscos ψϕ
T. Grosch - 37 -
Diffuse BeleuchtungDiffuse Beleuchtung
Entspricht der Abstrahlung matter OberflächenEntspricht der Abstrahlung matter Oberflächenabhängig von Oberflächennormale und LichteinfallParameter: Diffuse Reflexion(sfarbe) Md Lichtfarbe LdParameter: Diffuse Reflexion(sfarbe) Md, Lichtfarbe Ld
( )∑ ⋅+⋅⋅+⋅+⋅+=Lq
isin
sididiaaaae LMLMLMLMML#
1,,, coscos ψϕ
=i 1
ϕ
dM
T. Grosch - 38 -
Spiegelnde “Beleuchtung”Spiegelnde Beleuchtung
simuliert Spiegelungseffektesimuliert Spiegelungseffekteabhängig von Blickrichtung und reflekt. LichtrichtungParameter: Spiegelnde Reflexion(sfarbe) M &Parameter: Spiegelnde Reflexion(sfarbe) Ms & Lichtfarbe Ls, Glanzzahl n
( )∑ ++++Lq
n LMLMLMLMML#
coscos ψϕ( )∑=
⋅+⋅⋅+⋅+⋅+=i
isisididiaaaae LMLMLMLMML1
,,, coscos ψϕ
ψ
N = 5 N = 15
T. Grosch - 39 -
MaterialienMaterialien
Alle Materialeigenschaften werden über eine FunktionAlle Materialeigenschaften werden über eine Funktion gesetzt:
glMaterial{if}[v](side, name, value);glMaterial{if}[v](side, name, value);side: GL_FRONT, GL_BACK oder GL_FRONT_AND_BACKname: GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR, GL_EMISSION, GL_AMBIENT_AND_DIFFUSE erwarten eine RGBA-FarbeDie Glanzzahl kann über GL SHININESS gesetzt werdenDie Glanzzahl kann über GL_SHININESS gesetzt werden
lightmaterial.exe
Nate Robin
T. Grosch - 40 -
LichtquellenLichtquellen
von einigen Features gibt es mehr als eine Instanzvon einigen Features gibt es mehr als eine Instanz, z.B. Lichtquellen, Clip-Planes etc.diese werden meist über eine Funktion, die als erstendiese werden meist über eine Funktion, die als ersten Parameter eine Kennzeichnung der Instanz hat, manipuliert, z.B.
glLightf( GL_LIGHT0, …, … );setzt einen Wert für die 1. Lichtquelle
die Konstanten sind fortlaufend nummeriertGL_<CONST>i = GL_<CONST>0 + i
T. Grosch - 41 -
LichtquellenparameterLichtquellenparameter
Alle Parameter werden gesetzt durchAlle Parameter werden gesetzt durchglLight{if}[v](GL_LIGHTi, GLenum name, value);die maximale Lichtquellen-Anzahl kann durchdie maximale Lichtquellen Anzahl kann durch glGet(GL_MAX_LIGHTS) abgefragt werden (typischerweise 8 Lichtquellen)
j d Li h ll h 3 F b (j il RGBA)jede Lichtquelle hat 3 Farbwerte (jeweils RGBA):ambiente Stärke (GL_AMBIENT)diffuse Stärke (GL DIFFUSE)diffuse Stärke (GL_DIFFUSE)spekulare Stärke (GL_SPECULAR)
T. Grosch - 42 -
LichtquellenparameterLichtquellenparameter
Jede Lichtquelle hat eine GL POSITIONJede Lichtquelle hat eine GL_POSITIONHomogene Koordinate entscheidet, ob Punktlichtquelle oder „gerichtete Lichtquelle“Punktlichtquelle oder „gerichtete Lichtquelle
4 elementiger Vektor v• v[3]==0 => gerichtete Lichtquelle• v[3]==1 => Punkt- oder Spotlichtquelle
BeispielBeispielGLfloat ambient[] = { 0.0, 0.0, 0.0, 1.0 }; Shading Modell (lineare [] { , , , };GLfloat diffuse[] = { 1.0, 1.0, 1.0, 1.0 };GLfloat specular[] = { 1.0, 1.0, 1.0, 1.0 };GLfloat position[] = { 0 0 -0 5 0 5 1 0 };
Interpolation) einschalten
Lichtquelle „Nr. 0“ Werte fGLfloat position[] { 0.0, 0.5, 0.5, 1.0 };
glShadeModel(GL_SMOOTH);
definieren
glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
lLi h f (GL LIGHT0 GL SPECULAR l )glLightfv(GL_LIGHT0, GL_SPECULAR, specular);glLightfv(GL_LIGHT0, GL_POSITION, position);
Beleuchtung einschaltenglEnable(GL_LIGHTING);glEnable(GL_LIGHT0);
Beleuchtung einschalten
Lichtquelle „Nr. 0“ einschalten
T. Grosch - 44 -
Beispiel (cont )Beispiel (cont.)GLfloat mat emission[] = {0.0, 0.0, 0.0, 0.0}; _ [] { , , , };GLfloat mat_ambient[] = { 0.25, 0.20, 0.07, 1.0 };GLfloat mat_diffuse[] = { 0.75, 0.61, 0.23, 1.0 };GLfloat mat specular[] = { 0 63 0 56 0 37 1 0 };GLfloat mat_specular[] { 0.63, 0.56, 0.37, 1.0 };GLfloat shininess[] = { 51.0 };
glMaterialfv(GL FRONT GL EMISSION mat emission);glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission);glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse);
lM i lf (GL FRONT GL SPECULAR l )glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular);glMaterialfv(GL_FRONT, GL_SHININESS, shininess);
DrawSphere(…);
T. Grosch - 45 -
Eckpunkt-NormalenEckpunkt-NormalenVon der Applikation muss die BeispieleVon der Applikation muss die Normale definiert werden
Aufruf:lN l3{ i f}[ ]()
/* Normale pro Eckpunkt */glBegin (GL ...)
Beispiele
glNormal3{s,i,f}[v]();kann für jeden Eckpunkt oder konstant für die Fläche gesetzt
d
g g ( _ )glNormal3f(…);glVertex3f(…);…
werdenNormalen werden auch transformiert
glEnd();
/* konstante Flächennormale */OpenGL generiert keine Normalen (!)
Eckpunkt-Normale = State
/* konstante Flächennormale */glNormal3f(…);glBegin (GL_...)
glVertex3f( );Eckpunkt Normale State glVertex3f(…);…
glEnd();
T. Grosch - 46 -
Flat-Shading nvFlat-ShadingMit Hilfe der Oberflächen-
3Pn
Mit Hilfe der OberflächenNormalen wird durch das Beleuchtungsmodell die Farbe der Fläche berechnet PFarbe der Fläche berechnet.Diese ist quasi konstant über die gesamte Fläche
P
2P
1P
glShadeModel(GL_FLAT);
T. Grosch - 47 -
Gouraud-Shading 3nvGouraud-ShadingMit Hilfe der Normalen an
3F
3
2nvMit Hilfe der Normalen an den Eckpunkten werden durch das Beleuchtungs-modell die Farben an den F
2
1nvF
modell die Farben an den Eckpunkten berechnet.Bei der Scan-Konvertierung
2F1
werden dann die Farben der Eckpunkte bi-linear interpoliert.
1F
p
glShadeModel(GL_SMOOTH);
T. Grosch - 48 -
Phong-Shading 3nvPhong-ShadingBei der Scan-Konvertierung
3
2nvnv
Bei der Scan Konvertierung werden die Normalen der Eckpunkte bi-linear interpoliert
2
1nvF
interpoliert.Für jedes Pixel wird das Beleuchtungsmodell
1
ausgewertet und die Farbe des Pixels bestimmt.
(In OpenGL standardmässig nicht möglich…)
T. Grosch - 49 -
OpenGLOpenGLEs gibt nur Gouraud-Es gibt nur GouraudShadingEffekt wie bei Phong-Sh di d h hShading nur durch sehr feine Unterteilung der Oberflächen
T. Grosch - 50 -
Wichtige AnmerkungenWichtige AnmerkungenEs werden nur die Eckpunkte Lichtquellen haben keineEs werden nur die Eckpunkte beleuchtet
Sind besonders starke, lokale Effekte (z B
Lichtquellen haben keine Geometrie, sind also nicht sichtbarLi ht ll dlokale Effekte (z.B.
Highlights) wichtig, müssen die Flächen von der Applikation unterteilt werden
Lichtquellen werden nur berücksichtigt, solange sie eingeschaltet sind
Applikation unterteilt werdenglColor hat – sobald GL-LIGHTING eingeschaltet ist –( d f lt) k i Ei fl
Somit kann man für verschiedene Objekte verschiedene Lichtquellen
(per default) keinen Einfluss mehr auf die Objektfarbe
Diese wird durch die
aktivieren
Materialeigenschaften bestimmt (*Alternative: glColorMaterial…)
T. Grosch - 51 -
Position der LichtquellePosition der LichtquelleDie Position (und Richtung) Unterschied zwischen:Die Position (und Richtung) der Lichtquelle wird genauso behandelt wie ein Geometrieprimitiv
glLightfv (GL_LIGHT0, GL_POSITION,pos);glRotatef( …);
GeometrieprimitivTransformation mit GL_MODELVIEW
DrawObject(…);
Licht bleibt fest
glRotatef( …);glLightfv (GL LIGHT0, GL POSITION,pos);g g ( _ , _ ,p );DrawObject(…);
Licht dreht sich mit dem ObjektObjekt
T. Grosch - 52 -
Weitere LichteinstellungenWeitere Lichteinstellungen
Über glLightModel{if}[v]( GLenum name value ) könnenÜber glLightModel{if}[v]( GLenum name, value ) können verschiedene Einstellungen gemacht werden
Ambientes BeleuchtungsmodellgSchnelle / exakte Beleuchtung glänzender FlächenBeleuchtung der Rückseiten (Normal-Flip)
glColorMaterial( GLenum side, GLenum name );glColor() in Materialeigenschaft umwandeln (schneller Materialwechsel)
T. Grosch - 53 -
Berechnung der Normalen 1nvBerechnung der NormalenWie berechnet man die Normalen B
CD
1
2nv 3nv
Wie berechnet man die Normalen für die Punkte ?
Einfache Mittelung der Normalen der angrenzenden Flächen? A
D
der angrenzenden Flächen?Besser: winkelgewichtete Normale der angrenzenden Flächen.Od flä h i ht t N l
AE
CACBn ×=1v
Oder: flächengewichtete Normale der angrenzenden Flächen.
Problem:
CACBn1
CECAn ×=2v
man braucht Nachbar-schaftsinformationen. „Welche Fläche grenzt an Punkt C ?“
CDCEn ×=3v
( )vvvv ++gDreiecke müssen im konsistenten Uhrzeigersinn definiert werden
( )321 nnnn ++=
Flächengewichtet, da ni nicht normiert (n anschließend normieren).
T. Grosch - 54 -
Fazit: BeleuchtungFazit: BeleuchtungNur angenähert durch Materialparameter bestimmen:Nur angenähert durch ambient, diffus, specularnur an Eckpunkten
Materialparameter bestimmen: glMaterial();
Wichtigste: GL_DIFFUSE, GL AMBIENT
Der Weg zur Beleuchtung:Lichtparameter bestimmen:
GL_AMBIENTLichtquellen einschalten: glEnable(GL_LIGHTi);
Lichtparameter bestimmen: glLight();
Wichtigste: GL_DIFFUSE, GL POSITION
Strom einschalten: glEnable(GL_LIGHTING);Geometrie darstellenGL_POSITION
Evtl. Lichtmodell definieren:glLightModel();
Geometrie darstellenNormalen mit glNormal();angeben
( ö li h i Li h llglLightModel();Wichtigste: GL_LIGHT_MODEL_AMBIENT
(möglichst wenig Lichtquellen verwenden, da jede extra Zeit kostet)
T. Grosch - 55 -
Lichtquellen
LichtquellenLichtquellen
Bis jetzt wurde nur von der Lichtrichtung gesprochenBis jetzt wurde nur von der Lichtrichtung gesprochen, nicht wo sie herkommtOpenGL bietet 3 verschiedene Arten Lichtquellen:OpenGL bietet 3 verschiedene Arten Lichtquellen:
gerichtetePunktSpot
T. Grosch - 57 -
Gerichtete LichtquellenGerichtete Lichtquellen
entsprechen einer unendlich weit entferntenentsprechen einer unendlich weit entfernten Lichtquelleparallel einfallende Strahlenparallel einfallende StrahlenParameter: Richtung, Farbe Definition: homogene Koordinate der Position : 0Definition: homogene Koordinate der Position : 0GLfloat position[] = { 0.0, -0.5, 0.5, 0.0 };glLightfv(GL_LIGHT0, GL_POSITION, position);
T. Grosch - 58 -
PunktlichtquellePunktlichtquelle
ein lokalisierter Punkt strahlt das Licht ausein lokalisierter Punkt strahlt das Licht ausunterschiedliche Winkel auf eine ebene FlächeParameter: Position FarbeParameter: Position, FarbeDefinition: homogene Koordinate der Position != 0GLfloat position[] = { 0 0 0 5 0 5 1 0 };GLfloat position[] = { 0.0, -0.5, 0.5, 1.0 };glLightfv(GL_LIGHT0, GL_POSITION, position);
T. Grosch - 59 -
SpotlichtquelleSpotlichtquelle
Nur um einen bestimmten Winkel um eineNur um einen bestimmten Winkel um eine angegebene Richtung wird Licht ausgestrahltje weiter von der Richtung weg desto schwächer wirdje weiter von der Richtung weg desto schwächer wird das Licht (cosn-Verteilung)Parameter: Position, Richtung, Exponent, Farbe, g, p ,
T. Grosch - 60 -
SpotlichtquellenSpotlichtquellen
haben zusätzlich zu Punktlichtquellenhaben zusätzlich zu Punktlichtquelleneine Richtung (GL_SPOT_DIRECTION)einen Öffnungswinkel (GL SPOT CUTOFF)g ( _ _ )einen Exponenten (GL_SPOT_EXPONENT)
T. Grosch - 61 -
AbschwächungAbschwächung
Punkt- oder Spotlichtquellen können ihre StärkePunkt- oder Spotlichtquellen können ihre Stärke abhängig von der Entfernung d zur Oberfläche abschwächen
d: Abstand zwischen Lichtquelle und dem Eckpunktkc: GL_CONSTANT_ATTENUATION 1a =kl: GL_LINEAR_ATTENUATION kq: GL_QUADRATIC_ATTENUATION
( )Lq#
2dkdkka
qlc ⋅+⋅+=
Abschwächungsfaktor a 1 bei gerichteten
( )∑=
⋅+⋅⋅+⋅⋅+⋅+=q
iisi
nsididiaaaae LMLMLMaLMML
1,,, coscos ψϕ
Abschwächungsfaktor a = 1 bei gerichteten Lichtquellen
T. Grosch - 62 -
(Default)-Werte der Lichtquellenattr(Default)-Werte der Lichtquellenattr.
T. Grosch - 63 -
Wo wird beleuchtet?Wo wird beleuchtet?Nach der Modelview-Transformation sind Normalen und Eckpunkte imsind Normalen und Eckpunkte im Kamerakoordinatensystem. Diese Werte werden für die Beleuchtung verwendet.
12
334
T. Grosch - 64 -
ZusammenfassungZusammenfassung
ViewportViewportOpenGL PipelineClippingClippingBeleuchtung
Nächste WocheTexturenTexturen
T. Grosch - 65 -