(8) OpenGL-Pipeline. Vorlesung Computergrafik T. Grosch

Relevanta dokument
Logik für Informatiker

Nachrichten auf Deutsch

OpenGL-översikt. Mer OpenGL. Består-av-hierarki. Hierarkiska modeller. Från hierarki till kod, steg 1. Lokala koordinatsystem

Aspekte zur Character Semantik

Akademiker Öppning. Öppning - Introduktion. I denna uppsats kommer jag att undersöka/utreda/utvärdera/analysera...

TYSKA, KORT LÄROKURS, skriftlig del

Metallmaßstäbe RL. Inhaltsverzeichnis

301 Tage, Deutschland

Hallo und herzlich willkommen zu Unsere Hitliste! Ich bin Niklas, und hier sind meine vier Freunde...

TYSKA. Mango, das Zebra. Baby-Tiere. Diese Arbeitsblätter gibt es: 1. Vokabeln zur Sendung 2. Aufgaben zur Sendung 3. Lösungen ARBETSBLAD 2007/08

SchwedenQuiz. Quiz & Spiele. Diese Arbeitsblätter gibt es: 1. Vokabeln zur Sendung 2. Was weißt du über Schweden? (frågeformulär) 3.

En introduktion till OpenGL. Gustav Taxén

4.2 Konstantes Fördervolumen Doppelpume

Türkisch für Anfänger

Nachrichten auf Deutsch 09. April 2011

Einstufungstest Välkomna! Aufgabenblätter

Varför behövs grafikbibliotek? Introduktion till OpenGL. OpenGL är ett grafikbibliotek. Fördelar med OpenGL. Allmänt om OpenGL. Nackdelar med OpenGL

301 Tage, Deutschland

ARBETSBLAD KORTFILMSKLUBBEN TYSKA. Durch die Blumen (lätt) Ordkunskap Välj ut 10 av orden/fraserna nedan och sätt ihop en dialog på tyska!

Leroy. Teil 1. A R B E T S B L A D PROGRAMNR / tv1

Grammatikübungsbuch Schwedisch

ARBETSBLAD. KORTFILMSKLUBBEN TYSKA Bamboule

Mycket formellt, mottagaren har en speciell titel som ska användas i stället för namnet

301 Tage, Deutschland

PPV-Serie. DIN Axialkolben Verstellpumpe für LKW Nebenabtrieb mit Load Sensing-Regler. Erstinbetriebnahme: Saugstutzen muß separat bestellt werden

Hej! God morgon! Tjänare! Hejsan! 1 Hej!

Nachrichten auf Deutsch 12. März 2011

Kan jag ta ut pengar i [land] utan att behöva betala extra avgifter? Fragen, ob Gebühren anfallen, wenn man in einem bestimmten Land Geld abhebt

Välkomna! Einstufungstest. Aufgabenblätter

Ja, es ist ein Platz, wo oft Veranstaltungen sind, das heißt, man kann sich hier mit Freunden treffen...

BÄTTRE ÄN NÅGONSIN. Bäste medarbetare

Deutsche Hits. Diese Arbeitsblätter gibt es:

Geschäftskorrespondenz

Resa Logi Logi - Hitta boende Svenska Tyska Wo kann ich finden? ... ein Zimmer zu vermieten? ... ein Hostel? ... ein Hotel?

Resa Logi Logi - Hitta boende Tyska Svenska Var hittar jag? ... ett rum att hyra? ... ett vandrarhem? ... ett hotell? ... ett bed-and-breakfast?

F1220, F1230, F1120, F1130

TYSKA, KORT LÄROKURS

SERVICEINSTRUKTION Värmeproduktion. SERVICE INSTRUCTION Heat production. Wärmeerzeugung SIT SE/GB/DE M10383 FIGHTER 1320

IZZI. design ruud ekstrand

Optioner Options Optionen

0/22. Proseminar Programmiersysteme WS 2003/04. Typklassen: Haskell. Mark Kaminski. Betreuer: Andreas Rossberg. 1. April 2004

2. Setz die passende Verbform ein! (2 Punkte pro richtige Form!) / 16

Veranda. DE Installationshandbuch V17/16

Eine haarige Verwandlung

Bewerbung Anschreiben

Ich bin der Jens ich bin der Jens Jansen ich bin hier der Vater der Familie von Mette, Gesa, Helge, Sonja und jetzt auch von Sofi.

Reisen Unterwegs. Unterwegs - Ort. Jag har gått vilse. Du weißt nicht, wo Du bist

4 Fritid. 1 De tycker om att gå på restaurang. a Skriv under bilderna! Schreiben Sie unter die Bilder: Was machen die Personen?

4. Dialogövning Läroplanen säger: Olika former av samtal, dialoger och intervjuer.

Vi hoppas att du ser fram emot att lära dig ännu mera tyska. För att det ska gå så bra som möjligt får du här några tips från oss.

Präpositionen. efter. från. von: beim Passiv zur Angabe des Urhebers Tavlan är målad av en svensk konstnär.

Lagrange-Projektion. LMU München, Germany Thomas Schöps. Hüttenseminar im Zillertal bei Prof. Lars Diening Wintersemester 2014/2015

TYSKA. Überraschungsparty! Feste & Feiern. Diese Arbeitsblätter gibt es:

WiLlk. VÄLKo. WiLlkommen. VÄLkOMMEN

Nachrichten auf Deutsch

TYSKA. Unsere Hitliste. Musik & Co. Diese Arbeitsblätter gibt es:

Beispiel Magazin. TV-Möbel Romina % [ + [ 7 FP 'LPPEDUH ZHL H /(' %HO inklusive Fernbedienung. TV-Möbel Vicenza % [ + [ 7 FP

Installationsanvisning för IR-DUY Manual for IR-DUY Handbuch für IR-DUY

Lisa Dobrosch Exposé für die Magisterarbeit:

TAXUD/801/2004 DE Nachtrag Nr.: 2 Datum: Das Handbuch Versandverfahren wird wie folgt geändert:

Nachrichten auf Deutsch

Prävention alkoholbedingter Jugendgewalt (PAJ) Radioprojekt Webgeflüster

Immigration Bostad. Bostad - Hyra. Ange att du vill hyra någonting. ein Zimmer Typ av bostad. eine Wohnung/ ein Apartment Typ av bostad.

OpenGL. grafikbibliotek? Nackdelar med OpenGL. Fördelar med OpenGL. En introduktion till OpenGL. OpenGL. rdvara. Grafikhårdvara.

Kulturminnesvårdens perifera organisation Bergstrand, Axel Fornvännen 1939(34), s

Schweiz kvinnlig rösträtt

TYSKA. Türkisch für Anfänger. Teil 5. Diese Arbeitsblätter gibt es:

Türkisch für Anfänger

Tariff Kit. Installatörshandbok Tariff Kit för NIBE F1330 LEK. Installer manual Tariff Kit for NIBE F1330

Gebrauchsanweisung. Bure. Gehwagen. Bure XL

S in Stockholm, Göteborg, Malmö und Lund. Neue Regelungen

Jurtor-by på JUVENGÅRD

SERVICEINSTRUKTION Tider. SERVICE INSTRUCTION Times. Zeiten SIT SE/GB/DE M10401 FIGHTER 2005/2010

Geschäftskorrespondenz Brief

Var kan jag hitta formuläret för? Var kan jag hitta formuläret för? Fragen wo man ein Formular findet

Seminar Rough Sets. Präsentation von Christian Köllner Betreuer: Philipp Bender. Wintersemester 2003 / 04

Türkisch für Anfänger

PROPOSITIONENS HUVUDSAKLIGA INNEHÅLL

TYSKA. Türkisch für Anfänger. Teil 6. Diese Arbeitsblätter gibt es:

Praktikuppdrag 8-21 februari

Fußball und Skate. Eliteschule - Training - trainieren - Sport - Verein - Fußballerin - laufen - skaten - schwimmen - Fahrrad fahren

301 Tage, Deutschland

Deutsch lernen und lehren I, 3 högskolepoäng

Türkisch für Anfänger

Avalanche Studios. OpenGL. Vår teknik. Våra spel. Lite inspiration... Stora, öppna spelvärldar. Sandbox-gameplay. Hög audiovisuell standard

Certifierad kvalitetsklass

Lektion. 1Hej! Vad heter du? Sprachkurs Schwedisch, Buch 2012 Hueber Verlag, Ismaning, ISBN

PROJEKT LERNRAUM CAMPUS DIPL. ING KATJA NINNEMANN, ARCHITEKTIN DWB

Und täglich grüßt das Murmeltier Min dag som murmel Einleitung Lektion 16: Und täglich grüßt das Murmeltier... 2

Om översattandets konst

Zum ersten Mal gelesen zu werden ist so ein Gefühl, als würde man splitternackt durch die Stadt laufen

Musik für jede Laune. Sag s mir!

Nürnberg, Germany, Oktober 2018 VERANSTALTUNGS- ANALYSE

Jonathan Hedlund heter jag, är 20 år och jobbar här i Zürich som au pair för tre killar.

Buske Sprachkalender SCHWEDISCH 2016

Schweiz folkomröstningar

Ich glaube, ich schreibe meistens über Figuren oder Personen, die gerade Schwierigkeiten in ihrem Leben haben, also die am Kämpfen sind.

Die Johannesschüssel aus Norrby im Historischen Museum zu Stockholm : ein Werk des Henning von der Heide Paatz, Walter Fornvännen

Mein Berlin Levon Mitt Berlin Levon

Shaders. Renderingssystem. Renderingssystem. Renderingssystem. Hårdvara för 3D-rendering. Hårdvara för 3D-rendering

Transkript:

(8) OpenGL-Pipeline Vorlesung Computergrafik T. Grosch

y v v p ' = M ORTHO M PERSP M R L V 4T 4 K 2 S4 T4 3 R 444 24444 3 M PROJECTION M MODELVIEW v p u v y v x v x v z v z v C -f (r,t) A Modell/Weltkoordinaten y v z v -n z v x v (,,) Kamerakoordinaten y v x v (l,b) View Frustum (-,-,-) Kanonisches Volumen T. Grosch - 2 -

Viewport

Viewport-Transformation y v z v y v z v (,,) (,,) x v x v (-, -,-) (-,-,-) -) Transformation des kanonischen Volumens Transformation der xy-koordinaten aus (-,) )in die Bildschirm- (genauer Window -) koordinaten, z.b. (,599)x(,599) Transformation der z-koordinaten aus (-,) in den Bereich (,) für z-buffer T. Grosch - 4 -

Viewport Transformation (xy-werte) - y v z v höhe y v z.b. Fenster der Größe 6x6 Pixel - x v breite x v - T. Grosch - 5 -

y = h-.5 Bildschirmkoordinatensystem y v (;h-) (b-;h-) Ein Bildschirmfenster der Höhe h und der Breite b hat Pixelkoordinaten in x- Richtung von bis b-; in y- Richtung von bis h- Die Pixelkoordinaten sind die Mittelpunkte der quadratischen Pixel mit Kantenlänge y = -.5 x = -.5 (;) (b-;) x = b-.5 x v T. Grosch - 6 -

Bildschirmkoord.system system OpenGL y = h y v Offset des Pixelmittelpunktes Offset des Pixelmittelpunktes um.5 (.5;h-.5) (b-.5;h-.5) (.5;.5) (b-.5;.5) x = b x v T. Grosch - 7 -

Viewport in OpenGL y v y v h/2 y v y h - v -b/2 b/2 v x x - -h/2 b x v p ' p' x y = b 2 px + b 2 px = p x = = h 2 py + h 2 p' x b T. Grosch - 8 -

Viewport Es ist wichtig, wie die Pixel nachher bei der Rasterisierung angesprochen werden Bei OpenGL: Das gesamte Clip-Volumen wird auf den darstellbaren Fensterbereich abgebildet Verwendet man Anti-Aliasing durch Subpixelstrukturen, so kommen keine zusätzlichen Regionen dazu, die bereits weg-geclippt g sind. OpenGL p' = b 2 p + b p' x y = h 2 p x y + h 2 2 T. Grosch - 9 -

Viewport: Allgemein Angaben in Fensterkoordinaten h OpenGL-Kommando glviewport( GLint x, y, b, h); (x, y) b Viewport : p' x = b 2 px + b 2 + x p ' y = h 2 py + h 2 + y p' z = pz + 2 ( p + ) (,) p z v 2 z v z v - T. Grosch - -

Viewport als Matrix Viewport als Matrix M Viewport + 2 2 x b b Viewport + 2 2 2 2 y h h 2 2 2 2 lvi (GLd bl b h) 2 2 glviewport(gldouble x, y, b, h); T. Grosch - -

Beispiel Viewport.c Viewport.exe T. Grosch - 2 -

Typisches Programm void display() { glclear(gl_color_buffer_bit GL_DEPTH _BUFFER_BIT);... glutswapbuffers(); } void reshape( int w, int h) { glviewport(,, w, h); glmatrixmode(gl_projection); glloadidentity(); gluperspective(45, (float)w/h,., 2.); } glmatrixmode(gl_modelview); glloadidentity(); void init() { glclearcolor(.,.,.,.); glenable( GL_DEPTH_TEST); } void main( int argc, char **argv) { glutinit(&argc, argv); glutinitdisplaymode( GLUT_DOUBLE GLUT_RGBA GLUT_DEPTH); glutinitwindowsize(6,6); glutcreatewindow(..."); glutidlefunc(idle); glutspecialfunc(special); glutmousefunc(mouse); glutmotionfunc(motion); glutreshapefunc(reshape); glutkeyboardfunc(keyboard); glutdisplayfunc(display); p y init(); glutmainloop(); } T. Grosch - 3 -

OpenGL Rendering Pipeline v p' = V 4T 4 K 2 S4 T4 3 R v p' ' M MODELVIEW v p = Kamera im Ursprung, Blickrichtung entlang der negativen z-achse (Rechtssystem) 2 M ORTHO M PERSP M R L 444 24444 3 M PROJECTION v p' Division durch homogene Koordinate Viewport-Transformation Linkssystem: z-achse (noch) linear skaliert, kanonisches Volumen vor perspekt. Division 3 v p' '' = M Viewport v p' ' Linkssystem: z-achse nicht-linear skaliert, kanonisches Volumen nach perspektivischer Division: [-,]³ 4 Bildschirm- bzw. Fensterkoordinaten [,b-] x [,h-] x [,] T. Grosch - 4 -

Clipping

Clipping Wo? (l,t) -n -f y v z v (r,b) (-w,-w,-w) (w,w,w) x v y v z v (,,) 2 x v (-,-,-) 3 T. Grosch - 6 -

Problem mit Option -f (l,t) -n (r,b) Ebenengleichungen der Clippingebenen nicht so einfach zu bestimmen, bzw. Tests komplexer T. Grosch - 7 -

Option 3? Option 3? y v z v Bestimmung der Ebenengleichungen der Clipebenen: z (,,) = n AX v o de C pebe e x v (-,-,-) = = y y x o z = = y x Ergebnis: = + = x z Sieht einfach aus, aber = + = + z y T. Grosch - 8 -

Problem mit Option 3 p' z Unstetigkeit in der z-transformation: p' = n + f nf z p z f n n+f z-werte kleiner werden auf z - Werte größer n+f geflippt, was Clipping schwierig macht. n f p z y v z v Beispiel: Der Punkt A liegt vor der near-plane Eigentlich sollte die Linie A B gezeichnet werden Stattdessen wird die Linie A B gezeichnet A (-,-,-) A B A (,,), x v T. Grosch - 9 -

Festlegung OpenGL: Option 2 Clipebenen ) x w = y v z v 2) 3) y w = z w = 2 (w,w,w) 4) 5) 6) x + w = y + w = z + w = (-w,-w,-w) 6 x v (4D Raum hier etwas vereinfacht dargestellt, da w nicht konstant ) T. Grosch - 2 -

Festlegung OpenGL: Option 2 Clipebenen ) x w = y v z v 2) 3) y w = z w = 2 (w,w,w) 4) 5) 6) x + w = y + w = z + w = (-w,-w,-w) 6 x v (4D Raum hier etwas vereinfacht dargestellt, da w nicht konstant ) T. Grosch - 2 -

Clipping Verfahren in 3D Clipping Linie kanonisches Volumen (Quader) Cohen-Sutherland (6 Bit) Schnittpunkt Gerade Ebene, sonst praktisch gleich Clipping Polygon kanonisches Volumen (Quader) Sutherland-Hodgman Schnittpunkt Gerade Ebene, sonst ähnlich T. Grosch - 22 -

OpenGL Rendering Pipeline Kamera im Ursprung, Blickrichtung entlang der negativen z-achse (Rechtssystem) Linkssystem: z-achse (noch) linear skaliert, kanonisches Volumen vor perspekt. Division Clippingi Linkssystem: z-achse nicht-linear skaliert, kanonisches Volumen nach perspektivischer Division: [-,]³ v v p' = V 4T 4 K 2 S4 T4 3 R p v p' ' M MODELVIEW v M ORTHO M PERSP M R L p' 444 24444 3 = M PROJECTION Division durch homogene Koordinate Viewport-Transformation v p' '' = M Viewport v p' ' Bildschirm- bzw. Fensterkoordinaten [,b-] x [,h-] x [,] T. Grosch - 23 -

Materialien und Beleuchtung

Bisher: Eckpunktfarben Änderungen pro Eckpunkt möglich glbegin(gl_polygon); glcolor3f(,,); glvertex3f(,,); glcolor3f(,,); glvertex3f(,,); glcolor3f(,,); glvertex3f(.5,,); glend(); T. Grosch - 25 -

Beleuchtung Ohne Beleuchtung wirken die Objekte sehr flach, Formen sind schwer zu erkennen OpenGL verwendet klassisches Beleuchtungsmodell: allgemeines Umgebungslicht Lichtquellen und Materialien mit Umgebungslicht (ambient) diffuser Reflexion (diffuse) spiegelnder Reflexion (specular) Eigenausstrahlung von Materialien (emission) T. Grosch - 26 -

Diffuse Oberfläche (Lambert ) In der Computergraphik werden Oberflächenmaterialien oft als ideal diffus betrachtet. Egal von welcher Richtung man auf die Fläche sieht: sie wirkt immer gleich hell. Beispiel: Blatt Papier M d T. Grosch - 27 -

Diffuse Oberfläche (Lambert ) Entscheidend ist aber der Einfallswinkel des Lichts ϕ M Senkrechter Lichteinfall: Sehr hell d M ϕ d M ϕ Waagrechter Lichteinfall: Sehr dunkel d T. Grosch - 28 -

Lambert-Gesetz Die sichtbare Fläche nimmt mit dem cos des Einfallswinkels ab: n v ϕ A cosϕ M r L M g L M b L r g b cosϕ Materialfarbe Lichtfarbe cosϕ A ϕ: Winkel zwischen Oberflächennormalen und Lichteinfall ϕ ϕ ϕ M d M d M d T. Grosch - 29 -

Bemerkung Bei den Farben handelt es sich um rgb-vektoren M r Lr M g Lg cosϕ M b Lb Die Multiplikation ist eine komponentenweise Multiplikation (Licht hat seine eigene Mathematik ) Beispiel: Material rot, Licht ist weiß (Resultat: rotes Licht) Material rot, Licht 2 ist grün (Resultat: schwarz) T. Grosch - 3 -

Spiegelnder Term (Phong ) Glanz/Spiegelung tritt entlang des reflektierten Lichtvektors auf Blickt man in die Spiegelung des Lichtvektors, ist der Glanz sehr hell. M r L r n M g Lg cos ψ M b L b ψ n: Glanzzahl ψ: Winkel zw. reflektiertem Lichtstrahl und Blickrichtung T. Grosch - 3 -

Glanzzahl ψ cos n ψ n = n = n = 5 n = N = 5 N = 5 T. Grosch - 32 -

Phong-Beleuchtungsmodell Materialien bestehen aus Diffuser Komponente Spiegelnder Komponente Problem Abgewandte Flächen sind schwarz Lösung: Ambienter Term Wird immer aufaddiert d a Lq i= ( n M ) d cosϕi + Ms ψi Li # L = M L + cos T. Grosch - 33 -

Phong-Beleuchtungsmodell + # Lq L = Md La + + i= ( n M ) d cosϕi + Ms cos ψ i Li M d : diffuse Materialfarbe M s : spiegelnde Materialfarbe L a : ambiente Lichtfarbe L i : Farbe der Lichtquelle i n: Glanzahl Alle Terme (M, L) sind rgb- Farben Für den zu beleuchtenden Oberflächenpunkt muss die Normale bekannt sein Freiheit: die Materialfarbe kann von der spiegelnden Materialfarbe verschieden sein Problem: Die Summe aller Farben kann größer werden. T. Grosch - 34 -

L OpenGL-Beleuchtung = M e + M a L a + # Lq i= Klassisches Beleuchtungsmodell Viele Freiheiten Die einzelnen Anteile werden dann aufsummiert um die Farbe des Punktes zu erhalten Werte größer werden auf geclippt Global Ambiente Lichtfarbe ( n M + + ) a La, i Md cosϕi Ld, i Ms cos ψi Ls, i Materialien Emissionsfarbe Ambiente Reflexion(sfarbe) Diffuse Reflexion(sfarbe) Spiegelnde Reflexion(sfarbe) Glanzzahl Für jede Lichtquelle Position Ambiente Lichtfarbe Diffuse Lichtfarbe Spiegelnde Lichtfarbe T. Grosch - 35 -

Materialemission Emission dient zur Simulation selbstleuchtender Materialien, die allerdings keine anderen Objekte beleuchten. Die Emissionsfarbe wird einfach als Basishelligkeit genommen. Parameter: Emissionsfarbe Me L = M e + M a L a + # Lq n ( M a La, i + M d cosϕi Ld, i + M s cos ψ i Ls, i ) i= T. Grosch - 36 -

Ambiente Beleuchtung Simuliert gestreutes Umgebungslicht völlig unabhängig von der Geometrie Parameter: Ambiente Reflexion(sfarbe) Ma, ambiente Lichtfarbe La Gibt es als globalen Wert und pro Lichtquelle L = M e + M a L a + # Lq n ( M a La, i + M d cosϕi Ld, i + M s cos ψ i Ls, i ) i= T. Grosch - 37 -

Diffuse Beleuchtung Entspricht der Abstrahlung matter Oberflächen abhängig von Oberflächennormale und Lichteinfall Parameter: Diffuse Reflexion(sfarbe) Md, Lichtfarbe Ld L = M e + M a L a + # Lq n ( M a La, i + M d cosϕi Ld, i + M s cos ψ i Ls, i ) i= ϕ M d T. Grosch - 38 -

Spiegelnde Beleuchtung simuliert Spiegelungseffekte abhängig von Blickrichtung und reflekt. Lichtrichtung Parameter: Spiegelnde Reflexion(sfarbe) M s & Lichtfarbe Ls, Glanzzahl n L = M e + M a L a + # Lq n ( M a La, i + M d cos ϕi Ld, i + M s cos ψ i Ls, i ) i= ψ N = 5 N = 5 T. Grosch - 39 -

Materialien Alle Materialeigenschaften werden über eine Funktion gesetzt: glmaterial{if}[v](side, name, value); side: GL_FRONT, GL_BACK oder GL_FRONT_AND_BACK name: GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR, GL_EMISSION, GL_AMBIENT_AND_DIFFUSE erwarten eine RGBA-Farbe Die Glanzzahl kann über GL_SHININESS gesetzt werden lightmaterial.exe Nate Robin T. Grosch - 4 -

Lichtquellen von einigen Features gibt es mehr als eine Instanz, z.b. Lichtquellen, Clip-Planes etc. diese werden meist über eine Funktion, die als ersten Parameter eine Kennzeichnung der Instanz hat, manipuliert, z.b. gllightf( GL_LIGHT,, ); setzt einen Wert für die. Lichtquelle die Konstanten sind fortlaufend nummeriert GL_<CONST>i = GL_<CONST> + i T. Grosch - 4 -

Lichtquellenparameter Alle Parameter werden gesetzt durch gllight{if}[v](gl_lighti, GLenum name, value); die maximale Lichtquellen-Anzahl kann durch glget(gl_max_lights) abgefragt werden (typischerweise 8 Lichtquellen) jede Lichtquelle hat 3 Farbwerte (jeweils RGBA): ambiente Stärke (GL_AMBIENT) diffuse Stärke (GL_DIFFUSE) spekulare Stärke (GL_SPECULAR) T. Grosch - 42 -

Lichtquellenparameter Jede Lichtquelle hat eine GL_POSITION Homogene Koordinate entscheidet, ob Punktlichtquelle oder gerichtete Lichtquelle 4 elementiger Vektor v v[3]== => gerichtete Lichtquelle v[3]== => Punkt- oder Spotlichtquelle

Beispiel GLfloat ambient[] = {.,.,.,. }; Shading Modell (lineare GLfloat diffuse[] = {.,.,.,. }; Interpolation) einschalten GLfloat specular[] = {.,.,.,. }; Lichtquelle Nr. Werte GLfloat position[] = {., -.5,.5, 5. }; definieren glshademodel(gl_smooth); gllightfv(gl_light, GL_AMBIENT, ambient); gllightfv(gl_light, GL_DIFFUSE, diffuse); gllightfv(gl_light, LIGHT GL_SPECULAR, specular); gllightfv(gl_light, GL_POSITION, position); glenable(gl_lighting); glenable(gl_light); Beleuchtung einschalten Lichtquelle Nr. einschalten T. Grosch - 44 -

Beispiel (cont.) GLfloat mat_ emission[] = {.,.,.,.}; GLfloat mat_ambient[] = {.25,.2,.7,. }; GLfloat mat_diffuse[] = {.75,.6,.23,. }; GLfloat mat_specular[] = {.63,.56,.37,. }; GLfloat shininess[] = { 5. }; glmaterialfv(gl_front, GL_EMISSION, mat_emission); glmaterialfv(gl_front, GL_AMBIENT, mat_ambient); glmaterialfv(gl_front, GL_DIFFUSE, mat_diffuse); glmaterialfv(gl_front, lf GL_SPECULAR, mat_specular); glmaterialfv(gl_front, GL_SHININESS, shininess); DrawSphere( ); T. Grosch - 45 -

Eckpunkt-Normalen Von der Applikation muss die Beispiele Normale definiert werden /* Normale pro Eckpunkt */ Aufruf: glbegin g (GL _...) glnormal3{s,i,f}[v](); l3{ glnormal3f( ); kann für jeden Eckpunkt oder glvertex3f( ); konstant für die Fläche gesetzt werden glend(); Normalen werden auch transformiert /* konstante Flächennormale */ OpenGL generiert keine glnormal3f( ); Normalen (!) glbegin (GL_...) Eckpunkt-Normale = State glvertex3f( ); glend(); T. Grosch - 46 -

Flat-Shading n v Mit Hilfe der Oberflächen- Normalen wird durch das Beleuchtungsmodell die Farbe der Fläche berechnet. Diese ist quasi konstant über die gesamte Fläche P P 3 P 2 glshademodel(gl_flat); T. Grosch - 47 -

Gouraud-Shading 3 n v Mit Hilfe der Normalen an den Eckpunkten werden durch das Beleuchtungs- modell die Farben an den Eckpunkten berechnet. Bei der Scan-Konvertierung werden dann die Farben der Eckpunkte bi-linear interpoliert. n v F F 3 F n v 2 F 2 glshademodel(gl_smooth); T. Grosch - 48 -

Phong-Shading 3 Bei der Scan-Konvertierung werden die Normalen der Eckpunkte bi-linear interpoliert. Für jedes Pixel wird das Beleuchtungsmodell ausgewertet und die Farbe des Pixels bestimmt. n v n v F n v n v 2 (In OpenGL standardmässig nicht möglich ) T. Grosch - 49 -

OpenGL Es gibt nur Gouraud- Shading Effekt wie bei Phong- Shading nur durch sehr feine Unterteilung der Oberflächen T. Grosch - 5 -

Wichtige Anmerkungen Es werden nur die Eckpunkte Lichtquellen haben keine beleuchtet Geometrie, sind also nicht Sind besonders starke, sichtbar lokale Effekte (z.b. Lichtquellen werden nur Highlights) wichtig, müssen berücksichtigt, solange sie die Flächen von der eingeschaltet sind Applikation unterteilt werden Somit kann man für glcolor hat sobald GL- verschiedene Objekte LIGHTING eingeschaltet ist verschiedene Lichtquellen (per default) keinen Einfluss aktivieren mehr auf die Objektfarbe Diese wird durch die Materialeigenschaften bestimmt (*Alternative: glcolormaterial ) T. Grosch - 5 -

Position der Lichtquelle Die Position (und Richtung) Unterschied zwischen: der Lichtquelle wird genauso gllightfv (GL_LIGHT, GL_POSITION,pos); behandelt wie ein glrotatef( ); Geometrieprimitiv DrawObject( ); Transformation mit Licht bleibt fest GL_MODELVIEW glrotatef( ); gllightfv g (GL_ LIGHT, GL_ POSITION,pos); DrawObject( ); Licht dreht sich mit dem Objekt T. Grosch - 52 -

Weitere Lichteinstellungen Über gllightmodel{if}[v]( GLenum name, value ) können verschiedene Einstellungen gemacht werden Ambientes Beleuchtungsmodell Schnelle / exakte Beleuchtung glänzender Flächen Beleuchtung der Rückseiten (Normal-Flip) glcolormaterial( GLenum side, GLenum name ); glcolor() in Materialeigenschaft umwandeln (schneller Materialwechsel) T. Grosch - 53 -

Berechnung der Normalen Wie berechnet man die Normalen für die Punkte? Einfache Mittelung der Normalen der angrenzenden Flächen? Besser: winkelgewichtete Normale der angrenzenden Flächen. Oder: flächengewichtete ht t Normale der angrenzenden Flächen. Problem: man braucht Nachbarschaftsinformationen. Welche Fläche grenzt an Punkt C? Dreiecke müssen im konsistenten Uhrzeigersinn definiert werden A n v B E v n = CB CA v n 2 = CA CE v n = CE CD 3 n v n v 3 C 2 v v v n = + v ( n + n + ) 2 n3 Flächengewichtet, da n i nicht normiert (n anschließend normieren). T. Grosch - 54 - D

Fazit: Beleuchtung Nur angenähert durch Materialparameter bestimmen: ambient, diffus, specular glmaterial(); nur an Eckpunkten Wichtigste: GL_DIFFUSE, GL_AMBIENT Lichtquellen einschalten: Der Weg zur Beleuchtung: glenable(gl_lighti); Lichtparameter bestimmen: gllight(); Strom einschalten: Wichtigste: GL_DIFFUSE, glenable(gl_lighting); GL_POSITION Geometrie darstellen Normalen mit glnormal(); Evtl. Lichtmodell definieren: angeben gllightmodel(); (möglichst wenig Lichtquellen Wichtigste: verwenden, da jede extra Zeit GL_LIGHT_MODEL_AMBIENT kostet) T. Grosch - 55 -

Lichtquellen

Lichtquellen Bis jetzt wurde nur von der Lichtrichtung gesprochen, nicht wo sie herkommt OpenGL bietet 3 verschiedene Arten Lichtquellen: gerichtete Punkt Spot T. Grosch - 57 -

Gerichtete Lichtquellen entsprechen einer unendlich weit entfernten Lichtquelle parallel einfallende Strahlen Parameter: Richtung, Farbe Definition: homogene Koordinate der Position : GLfloat position[] = {., -.5,.5,. }; gllightfv(gl_light, GL_POSITION, position); T. Grosch - 58 -

Punktlichtquelle ein lokalisierter Punkt strahlt das Licht aus unterschiedliche Winkel auf eine ebene Fläche Parameter: Position, Farbe Definition: homogene Koordinate der Position!= GLfloat position[] = {., -.5, 5 5.5, };. gllightfv(gl_light, GL_POSITION, position); T. Grosch - 59 -

Spotlichtquelle Nur um einen bestimmten Winkel um eine angegebene Richtung wird Licht ausgestrahlt je weiter von der Richtung weg desto schwächer wird das Licht (cos n -Verteilung) Parameter: Position, Richtung, Exponent, Farbe T. Grosch - 6 -

Spotlichtquellen haben zusätzlich zu Punktlichtquellen eine Richtung (GL_SPOT_DIRECTION) einen Öffnungswinkel (GL_ SPOT_ CUTOFF) ) einen Exponenten (GL_SPOT_EXPONENT) T. Grosch - 6 -

Abschwächung Punkt- oder Spotlichtquellen können ihre Stärke abhängig von der Entfernung d zur Oberfläche abschwächen L = d: Abstand zwischen Lichtquelle und dem Eckpunkt k c : GL_CONSTANT_ATTENUATION k l : GL_LINEAR_ATTENUATION a = k q : GL_QUADRATIC_ATTENUATION M e + M a L a + #Lqq i= a Abschwächungsfaktor a = bei gerichteten Lichtquellen k c + k l d + k q d ( n M L + M cosϕ L + M ψ L ) a a, i d i d, i s cos i 2 s, i T. Grosch - 62 -

(Default)-Werte der Lichtquellenattr. T. Grosch - 63 -

Wo wird beleuchtet? Nach der Modelview-Transformation sind Normalen und Eckpunkte im Kamerakoordinatensystem. Diese Werte werden für die Beleuchtung verwendet. 2 3 4 T. Grosch - 64 -

Zusammenfassung Viewport OpenGL Pipeline Clipping Beleuchtung Nächste Woche Texturen T. Grosch - 65 -