![Page 1: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/1.jpg)
(8) OpenGL-Pipeline
VorlesungC t fik“„Computergrafik“
T. Grosch
![Page 2: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/2.jpg)
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 -
![Page 3: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/3.jpg)
Viewport
![Page 4: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/4.jpg)
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 -
![Page 5: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/5.jpg)
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 -
![Page 6: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/6.jpg)
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 -
![Page 7: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/7.jpg)
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 -
![Page 8: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/8.jpg)
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 -
![Page 9: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/9.jpg)
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 -
![Page 10: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/10.jpg)
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 -
![Page 11: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/11.jpg)
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 -
![Page 12: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/12.jpg)
BeispielBeispiel
Viewport.c Viewport.exe
T. Grosch - 12 -
![Page 13: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/13.jpg)
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 -
![Page 14: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/14.jpg)
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
![Page 15: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/15.jpg)
Clipping
![Page 16: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/16.jpg)
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 -
![Page 17: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/17.jpg)
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 -
![Page 18: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/18.jpg)
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 -
![Page 19: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/19.jpg)
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 -
![Page 20: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/20.jpg)
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 -
![Page 21: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/21.jpg)
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 -
![Page 22: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/22.jpg)
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 -
![Page 23: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/23.jpg)
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
![Page 24: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/24.jpg)
Materialien und Beleuchtung
![Page 25: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/25.jpg)
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 -
![Page 26: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/26.jpg)
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 -
![Page 27: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/27.jpg)
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 -
![Page 28: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/28.jpg)
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 -
![Page 29: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/29.jpg)
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 -
![Page 30: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/30.jpg)
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 -
![Page 31: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/31.jpg)
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 -
![Page 32: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/32.jpg)
Glanzzahl ψ ψncosGlanzzahl ψcos
0=n 1=n0n
5=n 100=n
N = 5 N = 15
T. Grosch - 32 -
![Page 33: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/33.jpg)
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 -
![Page 34: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/34.jpg)
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 -
![Page 35: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/35.jpg)
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 -
![Page 36: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/36.jpg)
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 -
![Page 37: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/37.jpg)
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 -
![Page 38: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/38.jpg)
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 -
![Page 39: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/39.jpg)
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 -
![Page 40: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/40.jpg)
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 -
![Page 41: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/41.jpg)
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 -
![Page 42: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/42.jpg)
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 -
![Page 43: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/43.jpg)
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
![Page 44: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/44.jpg)
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 -
![Page 45: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/45.jpg)
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 -
![Page 46: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/46.jpg)
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 -
![Page 47: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/47.jpg)
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 -
![Page 48: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/48.jpg)
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 -
![Page 49: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/49.jpg)
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 -
![Page 50: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/50.jpg)
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 -
![Page 51: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/51.jpg)
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 -
![Page 52: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/52.jpg)
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 -
![Page 53: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/53.jpg)
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 -
![Page 54: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/54.jpg)
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 -
![Page 55: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/55.jpg)
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 -
![Page 56: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/56.jpg)
Lichtquellen
![Page 57: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/57.jpg)
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 -
![Page 58: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/58.jpg)
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 -
![Page 59: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/59.jpg)
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 -
![Page 60: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/60.jpg)
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 -
![Page 61: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/61.jpg)
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 -
![Page 62: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/62.jpg)
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 -
![Page 63: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/63.jpg)
(Default)-Werte der Lichtquellenattr(Default)-Werte der Lichtquellenattr.
T. Grosch - 63 -
![Page 64: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/64.jpg)
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 -
![Page 65: 08 OpenGL Pipeline [Kompatibilitätsmodus]€¦ · Bildschirm-(genauer „Window“-) koordinaten, z.B. (0,599)x(0,599) Transformation der z-Koordinaten aus (-1,1) in den Bereich](https://reader035.vdocuments.mx/reader035/viewer/2022062607/605c247357b71749f651cab5/html5/thumbnails/65.jpg)
ZusammenfassungZusammenfassung
ViewportViewportOpenGL PipelineClippingClippingBeleuchtung
Nächste WocheTexturenTexturen
T. Grosch - 65 -