SlideShare une entreprise Scribd logo
1  sur  26
Télécharger pour lire hors ligne
CARL
      VON
OSSIETZKY
            Licht & Material

            Johannes Diemke

            ¨
            Ubung im Modul OpenGL mit Java
            Wintersemester 2010/2011
Motivation


Licht & 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
Motivation


Licht & Material




    Johannes Diemke   OpenGL mit Java   WiSe 2010 / 2011   3/26
Grundlagen


Lichtquellen
   Menschen sehen Objekte, indem Photonen ihr Auge erreichen
          Prallen von der Ober߬che ab
                               a
          Werden von der Ober߬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
Grundlagen


Lichtquellen (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
Grundlagen


Lichtquellen (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
Grundlagen


Material
   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 Ober߬che wird durch dessen Materialeigenschaften,
                        a
   den Eigenschaften der Lichtquelle und dem Beleuchtungsmodell
   bestimmt
    Johannes Diemke                 OpenGL mit Java         WiSe 2010 / 2011   7/26
Grundlagen


Beleuchtung
   Bezeichnet Interaktion zwischen Material, Licht und Geometrie

Shading
   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
Grundlagen


Beleuchtungsmodelle
   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
Grundlagen


Einschub: 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
Grundlagen


Ambiente Komponente
   Ad hoc Versuch Licht zu ber¨cksichtigen, das von anderen
                              u
   Ober߬chen kommt
        a
   Indirekte Beleuchtung durch Lichtreflexion zwischen Objekten



         iamb = mamb ⊗ samb




   Johannes Diemke            OpenGL mit Java      WiSe 2010 / 2011   11/26
Grundlagen


Diffuse 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
Grundlagen


Spiegelnde 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
Grundlagen


Spiegelnde 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 & Material


Licht 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 & Material


Licht 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 & Material


Licht 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 & Material


Point 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 & Material


Directional 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 & Material


Spot 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 & Material


Spot 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 Lichtquelle

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.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 & Material


Material
   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 & Material


Material (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

Contenu connexe

Plus de Johannes Diemke

Pfadplanung mit harmonischen Potentialfeldern
Pfadplanung mit harmonischen PotentialfeldernPfadplanung mit harmonischen Potentialfeldern
Pfadplanung mit harmonischen PotentialfeldernJohannes Diemke
 
2010-JOGL-08-Torus-Knoten
2010-JOGL-08-Torus-Knoten2010-JOGL-08-Torus-Knoten
2010-JOGL-08-Torus-KnotenJohannes Diemke
 
2010-JOGL-07-Hinweise-Uebungsblatt05
2010-JOGL-07-Hinweise-Uebungsblatt052010-JOGL-07-Hinweise-Uebungsblatt05
2010-JOGL-07-Hinweise-Uebungsblatt05Johannes Diemke
 
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-RemovalJohannes Diemke
 
2010-JOGL-02-Einfuehrung
2010-JOGL-02-Einfuehrung2010-JOGL-02-Einfuehrung
2010-JOGL-02-EinfuehrungJohannes Diemke
 
Einführung in minimale Spannbäume und deren Berechnung (Vortrag)
Einführung in minimale Spannbäume und deren Berechnung (Vortrag)Einführung in minimale Spannbäume und deren Berechnung (Vortrag)
Einführung in minimale Spannbäume und deren Berechnung (Vortrag)Johannes Diemke
 
Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)
Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)
Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)Johannes Diemke
 
Software Produktlinien: Einführung und Überblick (Vortrag)
Software Produktlinien: Einführung und Überblick (Vortrag)Software Produktlinien: Einführung und Überblick (Vortrag)
Software Produktlinien: Einführung und Überblick (Vortrag)Johannes Diemke
 
Theory Exploration (Ausarbeitung)
Theory Exploration (Ausarbeitung)Theory Exploration (Ausarbeitung)
Theory Exploration (Ausarbeitung)Johannes Diemke
 
Theory Exploration (Vortrag)
Theory Exploration (Vortrag)Theory Exploration (Vortrag)
Theory Exploration (Vortrag)Johannes Diemke
 
Domainvergabe durch die DENIC (Vortrag)
Domainvergabe durch die DENIC (Vortrag)Domainvergabe durch die DENIC (Vortrag)
Domainvergabe durch die DENIC (Vortrag)Johannes Diemke
 
Team Oldenburger Robo-Fußball – Abschlussbericht der Projektgruppe 2010
Team Oldenburger Robo-Fußball – Abschlussbericht  der Projektgruppe  2010Team Oldenburger Robo-Fußball – Abschlussbericht  der Projektgruppe  2010
Team Oldenburger Robo-Fußball – Abschlussbericht der Projektgruppe 2010Johannes Diemke
 
Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)
Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)
Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)Johannes Diemke
 
Agile Vorgehensmodelle in der Softwareentwicklung: Scrum
Agile Vorgehensmodelle in der Softwareentwicklung: ScrumAgile Vorgehensmodelle in der Softwareentwicklung: Scrum
Agile Vorgehensmodelle in der Softwareentwicklung: ScrumJohannes Diemke
 
Vorstellung des Roboterfußball-Teams TORF (Vortrag)
Vorstellung des Roboterfußball-Teams TORF (Vortrag)Vorstellung des Roboterfußball-Teams TORF (Vortrag)
Vorstellung des Roboterfußball-Teams TORF (Vortrag)Johannes Diemke
 

Plus de Johannes Diemke (17)

Polymorphie
PolymorphiePolymorphie
Polymorphie
 
Pfadplanung mit harmonischen Potentialfeldern
Pfadplanung mit harmonischen PotentialfeldernPfadplanung mit harmonischen Potentialfeldern
Pfadplanung mit harmonischen Potentialfeldern
 
2010-JOGL-08-Torus-Knoten
2010-JOGL-08-Torus-Knoten2010-JOGL-08-Torus-Knoten
2010-JOGL-08-Torus-Knoten
 
2010-JOGL-07-Hinweise-Uebungsblatt05
2010-JOGL-07-Hinweise-Uebungsblatt052010-JOGL-07-Hinweise-Uebungsblatt05
2010-JOGL-07-Hinweise-Uebungsblatt05
 
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal
2010-JOGL-04-Geometrische-Primitive-und-Hidden-Surface-Removal
 
2010-JOGL-02-Einfuehrung
2010-JOGL-02-Einfuehrung2010-JOGL-02-Einfuehrung
2010-JOGL-02-Einfuehrung
 
Boost C++ Libraries
Boost C++ LibrariesBoost C++ Libraries
Boost C++ Libraries
 
Einführung in minimale Spannbäume und deren Berechnung (Vortrag)
Einführung in minimale Spannbäume und deren Berechnung (Vortrag)Einführung in minimale Spannbäume und deren Berechnung (Vortrag)
Einführung in minimale Spannbäume und deren Berechnung (Vortrag)
 
Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)
Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)
Einführung in minimale Spannbäume und deren Berechnung (Ausarbeitung)
 
Software Produktlinien: Einführung und Überblick (Vortrag)
Software Produktlinien: Einführung und Überblick (Vortrag)Software Produktlinien: Einführung und Überblick (Vortrag)
Software Produktlinien: Einführung und Überblick (Vortrag)
 
Theory Exploration (Ausarbeitung)
Theory Exploration (Ausarbeitung)Theory Exploration (Ausarbeitung)
Theory Exploration (Ausarbeitung)
 
Theory Exploration (Vortrag)
Theory Exploration (Vortrag)Theory Exploration (Vortrag)
Theory Exploration (Vortrag)
 
Domainvergabe durch die DENIC (Vortrag)
Domainvergabe durch die DENIC (Vortrag)Domainvergabe durch die DENIC (Vortrag)
Domainvergabe durch die DENIC (Vortrag)
 
Team Oldenburger Robo-Fußball – Abschlussbericht der Projektgruppe 2010
Team Oldenburger Robo-Fußball – Abschlussbericht  der Projektgruppe  2010Team Oldenburger Robo-Fußball – Abschlussbericht  der Projektgruppe  2010
Team Oldenburger Robo-Fußball – Abschlussbericht der Projektgruppe 2010
 
Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)
Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)
Vorstellung des Roboterfußball-Teams TORF (Ausarbeitung)
 
Agile Vorgehensmodelle in der Softwareentwicklung: Scrum
Agile Vorgehensmodelle in der Softwareentwicklung: ScrumAgile Vorgehensmodelle in der Softwareentwicklung: Scrum
Agile Vorgehensmodelle in der Softwareentwicklung: Scrum
 
Vorstellung des Roboterfußball-Teams TORF (Vortrag)
Vorstellung des Roboterfußball-Teams TORF (Vortrag)Vorstellung des Roboterfußball-Teams TORF (Vortrag)
Vorstellung des Roboterfußball-Teams TORF (Vortrag)
 

2010-JOGL-06-Licht-und-Material

  • 1. CARL VON OSSIETZKY Licht & Material Johannes Diemke ¨ Ubung im Modul OpenGL mit Java Wintersemester 2010/2011
  • 2. Motivation Licht & 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
  • 3. Motivation Licht & Material Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 3/26
  • 4. Grundlagen Lichtquellen 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
  • 5. Grundlagen Lichtquellen (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
  • 6. Grundlagen Lichtquellen (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
  • 7. Grundlagen Material 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
  • 8. Grundlagen Beleuchtung Bezeichnet Interaktion zwischen Material, Licht und Geometrie Shading 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
  • 9. Grundlagen Beleuchtungsmodelle 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
  • 10. Grundlagen Einschub: 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
  • 11. Grundlagen Ambiente 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
  • 12. Grundlagen Diffuse 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
  • 13. Grundlagen Spiegelnde 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
  • 14. Grundlagen Spiegelnde 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
  • 15. Licht & Material Licht 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
  • 16. Licht & Material Licht 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
  • 17. Licht & Material Licht 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
  • 18. Licht & Material Point 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
  • 19. Licht & Material Directional 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
  • 20. Licht & Material Spot 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
  • 21. Licht & Material Spot 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
  • 22. Licht & Material ¨ Alle Parameter im Uberblick Setzen aller Parameter einer Lichtquelle 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.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
  • 23. Licht & Material Material 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
  • 24. Licht & Material Material (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
  • 25. 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
  • 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