Licht und Material Java 3D Carina Fleck. Lighting Modell Shading Modell Licht Material Farbmodell...

Preview:

Citation preview

Licht und Licht und MaterialMaterial

Java 3DJava 3DCarina Carina FleckFleck

• Lighting Modell• Shading Modell• Licht• Material• Farbmodell von Java 3D• Einflussbereich von Licht.• Schatten• Literaturverzeichnis

GliederunGliederungg

Einordnung in Einordnung in ObjekthierarchieObjekthierarchie

Versucht die Gegebenheiten der Natur

nachzubilden.

• Vektoren des Lighting Modell

• Reflektionstypen

Lighting Lighting ModellModell

Normalen-Vektor (N), Lichtrichtung (L) und

Benutzerblickrichtung (E)

Vektoren des Lighting Vektoren des Lighting ModellModell

• Vorteile von Gerichtetem Licht (Directional Light)

Vektoren des Lighting Vektoren des Lighting ModellModell

• Infinite Eye Local Eye

<->

• Oberflächen Normale (Surface Normals)– Primitive– Geometry-Objekt– GeometryInfo-Objekt

• Back Face Normal• Problem bei variierenden Oberflächen

Vektoren des Lighting Vektoren des Lighting ModellModell

ReflektionstReflektionstypenypen• Ambiente Reflektion

• Diffuse Reflektion

• Glanzpunkt

• Flat Shading• Gouraud Shading

Shading Shading ModellModell

Beleuchtung einer Szene:• 1. Licht auswählen

– Einflußbereich der Lichtquelle festlegen (Bounds)

– Zum Szenengraph hinzufügen

• 2. visuelle Objekte– Normale berechnen (Voder-/Rückseite)– Materialeigenschaften zuweisen

LichtLicht

Beispiel eines einfachen Programms:

1. Appearance createAppearance() {2. Appearance appear = new Appearance();3.4. //Material-Objekt instanziieren5. Material material = new Material();6.7. //Material-Eigenschaften der Appearance-Klasse zuweisen8. appear.setMaterial(material);9.10. return appear;11. }

LichtLicht

13. BranchGroup createScene (){14. BranchGroup scene = new BranchGroup();15.16. //Normale wird bei Primitiven automatisch gesetzt17. scene.addChild(new Sphere(0.5f, Sphere.GENERATE_NORMALS,18. createAppearance()));19.20. //Ambiente Lichtquelle instanziieren21. AmbientLight lightA = new AmbientLight();22.23. //Einflußbereich des Lichts setzen 24. lightA.setInfluencingBounds(new BoundingSphere());25.26. //Licht zur Szene hinzufügen27. scene.addChild(lightA);28.29. return scene; }

LichtLicht

• Abstrakte Oberklasse “Light“• Ambientes Licht (AmbientLight)• Gerichtetes Licht (DirectionalLight)• Punktlichtquelle (PointLight)• SpotLight• Vergleich der Licht-Typen

Die Licht-Die Licht-KlassenKlassen

Alle Lichtarten von abstrakten Oberklasse "Light“ abgeleitet.

Grundsätzliche Eigenschaften von Lichtquellen sind:

• Der Ein/Aus Status einer Lichtquelle:void setEnable(boolean state); //Default: TRUE

• Die Farbe des Lichts:void setColor(Color3f color); //Default: (1,1,1)

• Die Einflussregion des Lichts: void setInfluencingBounds(Bounds bounds)//Default: null

Oberklasse Oberklasse LightLight

• Indirkte Beleuchtung der visuellen Objekte• Keine diffuse und specular Reflektion (Fehlen der

Vektoren)• -> Geometrie wird nicht beachtet• Keine Richtung und keine Position

Ambientes Ambientes LichtLicht

Konstruktoren:

• AmbientLight()Konstruktor, der die Default-Wert für Color und den Enable-Status festlegt

• AmbientLight(Color3f color)

• AmbientLight(boolean lightOn, Color3f color)

Ambientes Ambientes LichtLicht

• Weit entfernte Lichtquelle (Sonne)

• konstanter Lichtrichtungsvektor(L) -> Lichtrichtung an allen Stellen der Objekte gleich.

• Für diffuse und specular Reflektion genutzt-> Geometrie wird beachtet

• Keinen Ursprung -> keine Abschwächung

Gerichtetes Gerichtetes LichtLicht

Konstruktoren:

• DirectionalLight() // Default:Direction (0, 0, -1)• DirectionalLight(Color3f color, Vector3f

direction)• DirectionalLight(boolean lightOn, Color3f color,

Vector3f direction)

Metoden:

• void setDirection(Vector3f direction)• void setDirection(float x, float y, float z)

Gerichtetes Gerichtetes LichtLicht

• Strahlt in alle Richtungen (Kerze, Glühbirne)• Besitzt eine Position • -> Lichtrichtungsvektor (L) nicht konstant• Abschwächung :• diffuse und specular Reflektion -> Geometrie• Bewegung ändert Schattierung

PunktlichtPunktlicht

2distance*quadraticdistance*linearconstant

1nattenuatio

Konstruktoren:

• PointLight() //Position (0,0,0), Attenuation (1,0,0)• PointLight(Color3f color, Point3f position, Point3f

attenuation)• PointLight(boolean lightOn, Color3f color, Point3f

position, Point3f• attenuation)

Methoden:

• void setAttenuation(Point3f attenuation)• void setAttenuation(float constant, float linear, float

quadratic)• void setPosition(Point3f position)• void setPosition(float x, float y, float z)

PunktlichtPunktlicht

• Unterklasse von Punktlicht• Strahlt in bestimmte Richtung (Linsen, etc.)• Besitzt Position -> Abschwächung• Öffnungswinkel, Konzentration, Richtung• Kann auch Teil von Objekt beleuchten• diffuse und specular Reflektion -> Geometrie• Bewegung ändert Schattierung

SpotlightSpotlight

• Konstruktoren:• SpotLight() //direction (0, 0, -1), concentration 0.0,

spreadAngle PI (180 degrees)• SpotLight(Color3f color, Point3f position, Point3f attenuation,

Vector3f• direction, float spreadAngle, float concentration)• SpotLight(boolean lightOn, Color3f color, Point3f position,

Point3f• attenuation, Vector3f direction, float spreadAngle, float

concentration)

• Methoden:• Zusätzliche Methoden zu Punktlicht • void setConcentration(float concentration)• void setDirection(float x, float y, float z)• void setDirection(Vector3f direction)• void setSpreadAngle(float spreadAngle)

SpotlightSpotlight

• Ambientes Licht: keine Geometrie, keine Abschwächung

• Gerichtetes Licht: Geometrie, keine Abschwächung

• Punktlicht: Geometrie, Abschwächung• SpotLight: Geometrie, Abschwächung,

Öffnungswinkel ...

Ambientes Licht < Gerichtetes Licht < Punktlicht < Spotlight

Vergleich der Vergleich der LichttypenLichttypen

• Max. 8 Lichtquellen pro Objekt (OpenGL)• So wenig Licht wie möglich• Meist reichen 2 Lichtquellen• Vorzugsweise ambient und directional

Licht

LichtLicht

• Materialeigenschaften nur, wenn Objekt beleuchtet ist.

• Wird über eine Referenz in der Appearance-Klasse genutzt.

Attribute:• Ambiente Color• Diffuse Color• Specular Color• Emmisive color (“Glow in the dark“-Effekt)• Shininess

MateriMaterialal

Ambiente Farbe(Ambient Color):• void setAmbientColor(Color3f color)• void setAmbientColor(float r, float g, float b)

Diffuse Farbe ( Diffuse Color) :• void setDiffuseColor(Color3f color)• void setDiffuseColor(float r, float g, float b)• void setDiffuseColor(float r, float g, float b, float a) //alpha

Spekuläre Farbe( Specular Color):• void setSpecularColor(Color3f color)• void setSpecularColor(float r, float g, float b)

Emittierte Farbe( Emissive Color):• void setEmissiveColor(Color3f color)• void setEmissiveColor(float r, float g, float b)

Glanz-Faktor (Shininess) :• void setShininess(float shininess)

MateriMaterialal

• Orientiert sich nicht an Realität• RGB -> additives Farbsystem

Farben:• ColoringAttributs von Appearance-Klasse• Farben der Material-Klasse• Per-vertex color der Geometry-Klasse

Farbmodell in Java 3DFarbmodell in Java 3D

• Bounds-Objekt– Dem Licht-Objekt hinzugefügt

• BoundingLeaf-Objekt:– dem Szenengraph hinzugefügt

• Scoping– Einflussbereich des Lichts nur auf Teil

des Szenengraphen

Einflussbereich von Einflussbereich von LichtLicht

• Wird nicht durch Lighting-Modell unterstützt

• Sehr komplex: Einfluss aller Objekte einer Szene zu beachten.

• Realisierung:– Schatten-Polygone

• colored shadow polygon • Shaded shadow polygon

– Schatten-Texturen

SchattSchattenen

• Java 3DTM API Tutorial

• http://webster.fhs-hagenberg.ac.at/staff/haller/mmp5_20012002/08java3d_1.pdf

• http://www.mathematik.uni-muenchen.de/~vrmlsem/old/1999wi/Vortraege/Farbmodelle/Farbmodelle.html

• http://multimedia.informatik.uni-augsburg.de/lehre/ss02/MMVL/Folien/Bild&Graphik-4-IV.pdf

• http://www.fh-wedel.de/~ko/Galerie/2000-WS-Seminar/Moeller/index.htm

• http://escience.anu.edu.au/lecture/cg/Illumination/index.en.html

• http://escience.anu.edu.au/lecture/cg/IlluminationJ3D/index.en.html

LiteraturverzeichnisLiteraturverzeichnis

Recommended