26
C A R L V ON O SS I ET Z KY Licht & Material Johannes Diemke ¨ Ubung im Modul OpenGL mit Java Wintersemester 2010/2011

Licht & Material - informatik.uni-oldenburg.detrigger/content/opengl/opengl... · Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/26. Literatur Edward Angel ... 3D Math Primer

  • Upload
    ngobao

  • View
    226

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Licht & Material - informatik.uni-oldenburg.detrigger/content/opengl/opengl... · Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/26. Literatur Edward Angel ... 3D Math Primer

C A R LV O N

O S S I E T Z K Y

Licht & Material

Johannes Diemke

Ubung im Modul OpenGL mit JavaWintersemester 2010/2011

Page 2: Licht & Material - informatik.uni-oldenburg.detrigger/content/opengl/opengl... · Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/26. Literatur Edward Angel ... 3D Math Primer

Motivation

Licht & Material

Geometrisch gut aussehende Modelle allein sind nicht ausreichend

Ein realistisches visuelles Erscheinungsbild benotigt mehr

I LichtquellenI MaterialienI TexturenI NebelI TransparenzI SchattenI . . .

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 2/26

Page 3: Licht & Material - informatik.uni-oldenburg.detrigger/content/opengl/opengl... · Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/26. Literatur Edward Angel ... 3D Math Primer

Motivation

Licht & Material

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

Page 4: Licht & Material - informatik.uni-oldenburg.detrigger/content/opengl/opengl... · Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/26. Literatur Edward Angel ... 3D Math Primer

Grundlagen

LichtquellenMenschen sehen Objekte, indem Photonen ihr Auge erreichen

I Prallen von der Oberflache abI Werden von der Oberflache emittiert

Photonen stammen von anderen Objekten oder LichtquellenI Directional LightsI Point LightsI Spot Lights

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 4/26

Page 5: Licht & Material - informatik.uni-oldenburg.detrigger/content/opengl/opengl... · Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/26. Literatur Edward Angel ... 3D Math Primer

Grundlagen

Lichtquellen (Forts.)Alle drei Lichtquellen haben Gemeinsamkeiten

I IntensitatI Farbe (RGB Werte)

Weitere Unterteilung moglichI Ambiente FarbintensitatI Diffuse FarbintensitatI Spiegelnde Farbintensitat

Notation Beschreibungsamb ambiente Intensitat

sdiff diffuse Intensitat

sspec spiegelnde Intensitat

spos Position der Lichtquelle (vierelementig)

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 5/26

Page 6: Licht & Material - informatik.uni-oldenburg.detrigger/content/opengl/opengl... · Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/26. Literatur Edward Angel ... 3D Math Primer

Grundlagen

Lichtquellen (Forts.)Unterteilung ist nicht physikalisch korrekt

I Gibt aber viel Kontrolle uber Erscheinungsbild

Spot Lights besitzen weitere Parameter

I RichtungsvektorI Cutt-Off WinkelI Spot Exponent

Notation Beschreibungsdir Richtung des Spot Lights

scut Cutt-Off Winkel des Lichtkegels

sexp Spot Exponent zur Kontrolle der Dampfung

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 6/26

Page 7: Licht & Material - informatik.uni-oldenburg.detrigger/content/opengl/opengl... · Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/26. Literatur Edward Angel ... 3D Math Primer

Grundlagen

Material

In Echtzeit-Computergrafik Systemen besitzen Materialien folgendeParameter

Notation Beschreibungmamb Ambiente Materialfarbe

mdiff Diffuse Materialfarbe

mspec Spiegelnde Materialfarbe

mshi Shininess Parameter (Skalar)

memi Emissive Materialfarbe

Die Farbe einer Oberflache wird durch dessen Materialeigenschaften,den Eigenschaften der Lichtquelle und dem Beleuchtungsmodellbestimmt

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 7/26

Page 8: Licht & Material - informatik.uni-oldenburg.detrigger/content/opengl/opengl... · Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/26. Literatur Edward Angel ... 3D Math Primer

Grundlagen

BeleuchtungBezeichnet Interaktion zwischen Material, Licht und Geometrie

ShadingProzess der Beleuchtungsberechnung und Bestimmung der darausresultierenden Farben eines PixelsDrei verschiedene Shading Typen

I Flat, Gouraud und Phong

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 8/26

Page 9: Licht & Material - informatik.uni-oldenburg.detrigger/content/opengl/opengl... · Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/26. Literatur Edward Angel ... 3D Math Primer

Grundlagen

Beleuchtungsmodelle

Die Beleuchtung wird mittels eines Beleuchtungsmodells berechnet

Unterteilung in KomponentenI AmbientI DiffusI Spiegelnd

Hat nicht viel mit der Realitat zu tun

itot = iamb + idiff + ispec

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 9/26

Page 10: Licht & Material - informatik.uni-oldenburg.detrigger/content/opengl/opengl... · Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/26. Literatur Edward Angel ... 3D Math Primer

Grundlagen

Einschub: komponentenweise Multiplikation von Vektoren

Ausschließlich fur Farbvektor-Operationen sinnvoll

Farben werden durch vierelementige Vektoren reprasentiert in denenjedes Element im Intervall [0, 1] liegt

u ⊗ v =

u1u2u3u4

v1v2v3v4

:=

u1 · v1u2 · v2u3 · v3u4 · v4

mdiff ⊗ sdiff beschreibt bspw. die Tatsache, das Oberflachen nurPhotonen mit der Farbe der Oberflache diffus reflektieren konnen

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 10/26

Page 11: Licht & Material - informatik.uni-oldenburg.detrigger/content/opengl/opengl... · Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/26. Literatur Edward Angel ... 3D Math Primer

Grundlagen

Ambiente Komponente

Ad hoc Versuch Licht zu berucksichtigen, das von anderenOberflachen kommt

Indirekte Beleuchtung durch Lichtreflexion zwischen Objekten

iamb = mamb ⊗ samb

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

Page 12: Licht & Material - informatik.uni-oldenburg.detrigger/content/opengl/opengl... · Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/26. Literatur Edward Angel ... 3D Math Primer

Grundlagen

Diffuse KomponenteBasiert auf Lamberts Gesetz

Photonen streuen gleichmaßig in alle Richtungen

idiff = max((n · l), 0)mdiff ⊗ sdiff

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 12/26

Page 13: Licht & Material - informatik.uni-oldenburg.detrigger/content/opengl/opengl... · Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/26. Literatur Edward Angel ... 3D Math Primer

Grundlagen

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

Page 14: Licht & Material - informatik.uni-oldenburg.detrigger/content/opengl/opengl... · Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/26. Literatur Edward Angel ... 3D Math Primer

Grundlagen

Spiegelnde Komponente (Forts.)

mshi beschreibt wie glanzend ein Material erscheint

Je großer mshi ist, desto glanzender das Material

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 14/26

Page 15: Licht & Material - informatik.uni-oldenburg.detrigger/content/opengl/opengl... · Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/26. Literatur Edward Angel ... 3D Math Primer

Licht & Material

Licht in OpenGL

Maximal 8 Lichter in der Fixed Function Pipeline

Verwendet Variante des Phong Beleuchtungsmodells

I Blinn–Phong

Beleuchtungsberechnung pro Vertex

Mogliche Shading Typen

I FlatI Gouraud

Mogliche Licht Typen

I Directional LightsI Point LightsI Spot Lights

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 15/26

Page 16: Licht & Material - informatik.uni-oldenburg.detrigger/content/opengl/opengl... · Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/26. Literatur Edward Angel ... 3D Math Primer

Licht & Material

Licht in OpenGL (Forts.)

Ein- und Ausschalten der Beleuchtungsberechnung

gl.glEnable(GL2.GL_LIGHTING);

gl.glDisable(GL2.GL_LIGHTING);

Jedes der 8 moglichen Lichter muss einzeln ein- und ausgeschaltetwerden

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

Page 17: Licht & Material - informatik.uni-oldenburg.detrigger/content/opengl/opengl... · Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/26. Literatur Edward Angel ... 3D Math Primer

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

Page 18: Licht & Material - informatik.uni-oldenburg.detrigger/content/opengl/opengl... · Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/26. Literatur Edward Angel ... 3D Math Primer

Licht & Material

Point LightsLicht strahlt gleichmaßig in alle Richtungen

Wird definiert durch Setzen der w -Komponente der Lichtpositionauf 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

Page 19: Licht & Material - informatik.uni-oldenburg.detrigger/content/opengl/opengl... · Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/26. Literatur Edward Angel ... 3D Math Primer

Licht & Material

Directional LightsSimulation von Lichtquellen mit unendlicher EntfernungAlle Lichtstrahlen verlaufen parallelWird definiert durch Setzen der w -Komponente der Lichtpositionauf w = 0

I 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

Page 20: Licht & Material - informatik.uni-oldenburg.detrigger/content/opengl/opengl... · Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/26. Literatur Edward Angel ... 3D Math Primer

Licht & Material

Spot LightsSimulation von Scheinwerferlicht

Definition analog zu Pointlights mit w = 1Spezielle Spotlightparameter

I Spotlight Cutoff (≥ 180 ergibt wieder ein Pointlight)I Spotlight DirectionI Spotlight Exponent

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 20/26

Page 21: Licht & Material - informatik.uni-oldenburg.detrigger/content/opengl/opengl... · Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/26. Literatur Edward Angel ... 3D Math Primer

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

Page 22: Licht & Material - informatik.uni-oldenburg.detrigger/content/opengl/opengl... · Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/26. Literatur Edward Angel ... 3D Math Primer

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

Page 23: Licht & Material - informatik.uni-oldenburg.detrigger/content/opengl/opengl... · Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/26. Literatur Edward Angel ... 3D Math Primer

Licht & Material

MaterialBestimmt Materialeigenschaften

I Reflexion des ambienten, diffusen und spiegelnden LichtsI Eigene Lichtemission und Glanzen

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

Page 24: Licht & Material - informatik.uni-oldenburg.detrigger/content/opengl/opengl... · Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/26. Literatur Edward Angel ... 3D Math Primer

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

Page 25: Licht & Material - informatik.uni-oldenburg.detrigger/content/opengl/opengl... · Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/26. Literatur Edward Angel ... 3D Math Primer

Literatur

� Dave ShreinerOpenGL Programming Guidehttp://www.opengl-redbook.com/

� Richard S. Wright, Benjamin Lipchak und Nicholas HaemelOpenGL SuperBibelhttp://www.starstonesoftware.com/OpenGL/

� Randi J. RostOpenGL Shading Languagehttp://www.3dshaders.com/

� Tomas Akenine-Moller, Eric Haines und Naty HoffmanReal-Time Renderinghttp://www.realtimerendering.com/

Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/26

Page 26: Licht & Material - informatik.uni-oldenburg.detrigger/content/opengl/opengl... · Johannes Diemke OpenGL mit Java WiSe 2010 / 2011 25/26. Literatur Edward Angel ... 3D Math Primer

Literatur

� Edward AngelInteractive Computer Graphicshttp://www.cs.unm.edu/˜angel/

� Gerald Farin und Dianne HansfordPractical Linear Algebrahttp://www.farinhansford.com/books/pla/

� Fletcher Dunn und Ian Parberry3D Math Primer for Graphics and Game Developmentwww.gamemath.com/

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