2010-JOGL-06-Licht-und-Material
Upcoming SlideShare
Loading in...5
×
 

2010-JOGL-06-Licht-und-Material

on

  • 391 views

 

Statistics

Views

Total Views
391
Views on SlideShare
391
Embed Views
0

Actions

Likes
0
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

2010-JOGL-06-Licht-und-Material 2010-JOGL-06-Licht-und-Material Presentation Transcript

  • CARL VONOSSIETZKY Licht & Material Johannes Diemke ¨ Ubung im Modul OpenGL mit Java Wintersemester 2010/2011
  • MotivationLicht & Material Geometrisch gut aussehende Modelle allein sind nicht ausreichend Ein realistisches visuelles Erscheinungsbild ben¨tigt mehr o Lichtquellen Materialien Texturen Nebel Transparenz Schatten ... Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 2/26
  • MotivationLicht & Material Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 3/26
  • GrundlagenLichtquellen Menschen sehen Objekte, indem Photonen ihr Auge erreichen Prallen von der Oberfl¨che ab a Werden von der Oberfl¨che emittiert a Photonen stammen von anderen Objekten oder Lichtquellen Directional Lights Point Lights Spot Lights Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 4/26
  • GrundlagenLichtquellen (Forts.) Alle drei Lichtquellen haben Gemeinsamkeiten Intensit¨t a Farbe (RGB Werte) Weitere Unterteilung m¨glich o Ambiente Farbintensit¨t a Diffuse Farbintensit¨t a Spiegelnde Farbintensit¨t a Notation Beschreibung samb ambiente Intensit¨t a sdiff diffuse Intensit¨t a sspec spiegelnde Intensit¨t a spos Position der Lichtquelle (vierelementig) Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 5/26
  • GrundlagenLichtquellen (Forts.) Unterteilung ist nicht physikalisch korrekt Gibt aber viel Kontrolle uber Erscheinungsbild ¨ Spot Lights besitzen weitere Parameter Richtungsvektor Cutt-Off Winkel Spot Exponent Notation Beschreibung sdir Richtung des Spot Lights scut Cutt-Off Winkel des Lichtkegels sexp Spot Exponent zur Kontrolle der D¨mpfung a Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 6/26
  • GrundlagenMaterial In Echtzeit-Computergrafik Systemen besitzen Materialien folgende Parameter Notation Beschreibung mamb Ambiente Materialfarbe mdiff Diffuse Materialfarbe mspec Spiegelnde Materialfarbe mshi Shininess Parameter (Skalar) memi Emissive Materialfarbe Die Farbe einer Oberfl¨che wird durch dessen Materialeigenschaften, a den Eigenschaften der Lichtquelle und dem Beleuchtungsmodell bestimmt Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 7/26
  • GrundlagenBeleuchtung Bezeichnet Interaktion zwischen Material, Licht und GeometrieShading Prozess der Beleuchtungsberechnung und Bestimmung der daraus resultierenden Farben eines Pixels Drei verschiedene Shading Typen Flat, Gouraud und Phong Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 8/26
  • GrundlagenBeleuchtungsmodelle Die Beleuchtung wird mittels eines Beleuchtungsmodells berechnet Unterteilung in Komponenten Ambient Diffus Spiegelnd Hat nicht viel mit der Realit¨t zu tun a itot = iamb + idiff + ispec Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 9/26
  • GrundlagenEinschub: komponentenweise Multiplikation von Vektoren Ausschließlich f¨r Farbvektor-Operationen sinnvoll u Farben werden durch vierelementige Vektoren repr¨sentiert in denen a jedes Element im Intervall [0, 1] liegt      u1 v1 u1 · v1  :=  u2 · v2   u2   v2    u⊗v=  u3  ⊗  v3     u3 · v3  u4 v4 u4 · v4 mdiff ⊗ sdiff beschreibt bspw. die Tatsache, das Oberfl¨chen nur a Photonen mit der Farbe der Oberfl¨che diffus reflektieren k¨nnen a o Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 10/26
  • GrundlagenAmbiente Komponente Ad hoc Versuch Licht zu ber¨cksichtigen, das von anderen u Oberfl¨chen kommt a Indirekte Beleuchtung durch Lichtreflexion zwischen Objekten iamb = mamb ⊗ samb Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 11/26
  • GrundlagenDiffuse Komponente Basiert auf Lamberts Gesetz Photonen streuen gleichm¨ßig in alle Richtungen a idiff = max((n · l), 0)mdiff ⊗ sdiff Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 12/26
  • GrundlagenSpiegelnde Komponente Basiert auf dem Phong Beleuchtungsmodell (nicht Phong Shading) Simuliert Glanzlicht ispec = max((r · v), 0)mshi mspec ⊗ sspec , r = 2(n · l)n − l Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 13/26
  • GrundlagenSpiegelnde Komponente (Forts.) mshi beschreibt wie gl¨nzend ein Material erscheint a Je gr¨ßer mshi ist, desto gl¨nzender das Material o a Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 14/26
  • Licht & MaterialLicht in OpenGL Maximal 8 Lichter in der Fixed Function Pipeline Verwendet Variante des Phong Beleuchtungsmodells Blinn–Phong Beleuchtungsberechnung pro Vertex M¨gliche Shading Typen o Flat Gouraud M¨gliche Licht Typen o Directional Lights Point Lights Spot Lights Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 15/26
  • Licht & MaterialLicht in OpenGL (Forts.) Ein- und Ausschalten der Beleuchtungsberechnung gl.glEnable(GL2.GL_LIGHTING); gl.glDisable(GL2.GL_LIGHTING); Jedes der 8 m¨glichen Lichter muss einzeln ein- und ausgeschaltet o werden gl.glEnable(GL2.GL_LIGHT0); gl.glEnable(GL2.GL_LIGHT7); // draw fully lit deathstar gl.glDisable(GL2.GL_LIGHT0); gl.glDisable(GL2.GL_LIGHT7); Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 16/26
  • Licht & MaterialLicht in OpenGL (Forts.) Setzen der Parameter einer Lichtquelle gl.glEnable(GL2.GL_LIGHTING); gl.glEnable(GL2.GL_LIGHT0); float[] ambientLight = {0.0f, 0.0f, 0.0f, 1.0f}; float[] diffuseLight = {1.0f, 1.0f, 1.0f, 1.0f}; float[] specularLight = {1.0f, 1.0f, 1.0f, 1.0f}; float[] lightPosition = {0.0f, 0.0f, 0.0f, 1.0f}; gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_AMBIENT, ambientLight, 0); gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_DIFFUSE, diffuseLight, 0); gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_SPECULAR, specularLight, 0); gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_POSITION, lightPosition, 0); Aber das ist noch lange nicht alles . . . Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 17/26
  • Licht & MaterialPoint Lights Licht strahlt gleichm¨ßig in alle Richtungen a Wird definiert durch Setzen der w -Komponente der Lichtposition auf w = 1 float[] lightPosition = {point.x, point.y, point.z, 1.0f}; gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_POSITION, lightPosition, 0); Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 18/26
  • Licht & MaterialDirectional Lights Simulation von Lichtquellen mit unendlicher Entfernung Alle Lichtstrahlen verlaufen parallel Wird definiert durch Setzen der w -Komponente der Lichtposition auf w = 0 Position wird dann als Vektor in Richtung der Lichtquelle interpretiert float[] lightPosition = {vector.x, vector.y, vector.z, 0.0f}; gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_POSITION, lightPosition, 0); Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 19/26
  • Licht & MaterialSpot Lights Simulation von Scheinwerferlicht Definition analog zu Pointlights mit w = 1 Spezielle Spotlightparameter Spotlight Cutoff (≥ 180 ergibt wieder ein Pointlight) Spotlight Direction Spotlight Exponent Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 20/26
  • Licht & MaterialSpot Lights (Forts.) Setzen der Spot Light Parameter float[] spotDirection = {0.0f, 0.0f, -1.0f}; float spotExponent = 0.0f; float spotCutoff = 30.0f; gl.glLightf(GL2.GL_LIGHT0, GL2.GL_SPOT_CUTOFF, spotCutoff); gl.glLightf(GL2.GL_LIGHT0, GL2.GL_SPOT_EXPONENT, spotExponent); gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_SPOT_DIRECTION, spotDirection, 0); Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 21/26
  • Licht & Material ¨Alle Parameter im Uberblick Setzen aller Parameter einer Lichtquellegl.glLightfv(GL2.GL_LIGHT0, GL2.GL_AMBIENT, ambientLight, 0);gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_DIFFUSE, diffuseLight, 0);gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_SPECULAR, specularLight, 0);gl.glLightf(GL2.GL_LIGHT0, GL2.GL_CONSTANT_ATTENUATION, constantAttenuation);gl.glLightf(GL2.GL_LIGHT0, GL2.GL_LINEAR_ATTENUATION, linearAttenuation);gl.glLightf(GL2.GL_LIGHT0, GL2.GL_QUADRATIC_ATTENUATION, quadraticAttenuation);gl.glLightf(GL2.GL_LIGHT0, GL2.GL_SPOT_CUTOFF, spotCutoff);gl.glLightf(GL2.GL_LIGHT0, GL2.GL_SPOT_EXPONENT, spotExponent);gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_SPOT_DIRECTION, spotDirection, 0);gl.glLightfv(GL2.GL_LIGHT0, GL2.GL_POSITION, lightPosition, 0); Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 22/26
  • Licht & MaterialMaterial Bestimmt Materialeigenschaften Reflexion des ambienten, diffusen und spiegelnden Lichts Eigene Lichtemission und Gl¨nzen a float[] matAmbient = {0.0f, 0.0f, 0.0f, 1.0f}; float[] matDiffuse = {0.0f, 0.0f, 0.0f, 1.0f}; float[] matSpecular = {0.0f, 0.0f, 0.0f, 1.0f}; float[] matEmission = {0.0f, 0.0f, 0.0f, 1.0f}; float matShininess = 0.0f; gl.glMaterialfv(GL2.GL_FRONT, GL2.GL_AMBIENT, matAmbient, 0); gl.glMaterialfv(GL2.GL_FRONT, GL2.GL_DIFFUSE, matDiffuse, 0); gl.glMaterialfv(GL2.GL_FRONT, GL2.GL_SPECULAR, matSpecular, 0); gl.glMaterialfv(GL2.GL_FRONT, GL2.GL_EMISSION, matEmission, 0); gl.glMaterialf(GL2.GL_FRONT, GL2.GL_SHININESS, matShininess); Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 23/26
  • Licht & MaterialMaterial (Forts.) Zusammenfassen der Materialparameter zu einer Klasse Material material = new Material(); material.setAmbient(0.2f, 0.2f, 0.2f, 1.0f); material.setDiffuse(0.5f, 0.56f, 0.5f, 1.0f); material.setSpecular(Color.ORANGE); material.setEmission(0,0,0,0); material.setShininess(12.0f); material.bind(gl); deathstar.draw(gl); Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 24/26
  • Literatur Dave Shreiner OpenGL Programming Guide http://www.opengl-redbook.com/ Richard S. Wright, Benjamin Lipchak und Nicholas Haemel OpenGL SuperBibel http://www.starstonesoftware.com/OpenGL/ Randi J. Rost OpenGL Shading Language http://www.3dshaders.com/ Tomas Akenine-M¨ller, Eric Haines und Naty Hoffman o Real-Time Rendering http://www.realtimerendering.com/ Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/26
  • Literatur Edward Angel Interactive Computer Graphics http://www.cs.unm.edu/˜angel/ Gerald Farin und Dianne Hansford Practical Linear Algebra http://www.farinhansford.com/books/pla/ Fletcher Dunn und Ian Parberry 3D Math Primer for Graphics and Game Development www.gamemath.com/ Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 26/26