08 opengl pipeline [kompatibilitätsmodus]€¦ · bildschirm-(genauer „window“-) koordinaten,...

65
(8) OpenGL-Pipeline Vorlesung C t fik“ Computergrafik“ T. Grosch

Upload: others

Post on 18-Oct-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

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

(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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(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

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

ZusammenfassungZusammenfassung

ViewportViewportOpenGL PipelineClippingClippingBeleuchtung

Nächste WocheTexturenTexturen

T. Grosch - 65 -