Carina Fleck
Java 3D
Licht und Material
Gliederung
•
•
•
•
•
•
•
•
Lighting Modell
Shading Modell
Licht
Material
Farbmodell von Java 3D
Einflussbereich von Licht.
Schatten
Literaturverzeichnis
Einordnung in Objekthierarchie
Lighting Modell
Versucht die Gegebenheiten der Natur
nachzubilden.
• Vektoren des Lighting Modell
• Reflektionstypen
Vektoren des Lighting Modell
Normalen-Vektor (N), Lichtrichtung (L) und
Benutzerblickrichtung (E)
Vektoren des Lighting Modell
• Vorteile von
Gerichtetem Licht
(Directional Light)
•
Infinite Eye
Local Eye
<->
Vektoren des Lighting Modell
• Oberflächen Normale (Surface Normals)
– Primitive
– Geometry-Objekt
– GeometryInfo-Objekt
• Back Face Normal
• Problem bei variierenden Oberflächen
Reflektionstypen
• Ambiente Reflektion
• Diffuse Reflektion
• Glanzpunkt
Shading Modell
• Flat Shading
• Gouraud Shading
Licht
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
Licht
Beispiel eines einfachen Programms:
1. Appearance createAppearance() {
2. Appearance appear = new Appearance();
3.
4. //Material-Objekt instanziieren
5. Material material = new Material();
6.
7. //Material-Eigenschaften der Appearance-Klasse zuweisen
8. appear.setMaterial(material);
9.
10. return appear;
11. }
Licht
13. BranchGroup createScene (){
14. BranchGroup scene = new BranchGroup();
15.
16. //Normale wird bei Primitiven automatisch gesetzt
17. scene.addChild(new Sphere(0.5f, Sphere.GENERATE_NORMALS,
18. createAppearance()));
19.
20. //Ambiente Lichtquelle instanziieren
21. AmbientLight lightA = new AmbientLight();
22.
23. //Einflußbereich des Lichts setzen
24. lightA.setInfluencingBounds(new BoundingSphere());
25.
26. //Licht zur Szene hinzufügen
27. scene.addChild(lightA);
28.
29. return scene; }
Die Licht-Klassen
•
•
•
•
•
•
Abstrakte Oberklasse “Light“
Ambientes Licht (AmbientLight)
Gerichtetes Licht (DirectionalLight)
Punktlichtquelle (PointLight)
SpotLight
Vergleich der Licht-Typen
Oberklasse Light
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
Ambientes Licht
• Indirkte Beleuchtung der visuellen Objekte
• Keine diffuse und specular Reflektion (Fehlen der
Vektoren)
• -> Geometrie wird nicht beachtet
• Keine Richtung und keine Position
Ambientes Licht
Konstruktoren:
• AmbientLight()
Konstruktor, der die Default-Wert für Color und
den Enable-Status festlegt
• AmbientLight(Color3f color)
• AmbientLight(boolean lightOn, Color3f
color)
Gerichtetes Licht
•
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 Licht
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)
Punktlicht
•
•
•
•
•
•
Strahlt in alle Richtungen (Kerze, Glühbirne)
Besitzt eine Position
-> Lichtrichtungsvektor (L) nicht konstant
1
attenuation 
Abschwächung :
constant linear * distance quadratic* distance
diffuse und specular Reflektion -> Geometrie
Bewegung ändert Schattierung
2
Punktlicht
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)
Spotlight
•
•
•
•
•
•
•
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
Spotlight
•
•
•
•
•
•
•
•
•
•
•
•
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)
Vergleich der Lichttypen
• 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
Licht
•
•
•
•
Max. 8 Lichtquellen pro Objekt (OpenGL)
So wenig Licht wie möglich
Meist reichen 2 Lichtquellen
Vorzugsweise ambient und directional
Licht
Material
• Materialeigenschaften nur, wenn Objekt
beleuchtet ist.
• Wird über eine Referenz in der AppearanceKlasse genutzt.
Attribute:
• Ambiente Color
• Diffuse Color
• Specular Color
• Emmisive color (“Glow in the dark“-Effekt)
• Shininess
Material
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)
Farbmodell in Java 3D
• Orientiert sich nicht an Realität
• RGB -> additives Farbsystem
Farben:
• ColoringAttributs von Appearance-Klasse
• Farben der Material-Klasse
• Per-vertex color der Geometry-Klasse
Einflussbereich von Licht
• Bounds-Objekt
– Dem Licht-Objekt hinzugefügt
• BoundingLeaf-Objekt:
– dem Szenengraph hinzugefügt
• Scoping
– Einflussbereich des Lichts nur auf Teil des
Szenengraphen
Schatten
• 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
Literaturverzeichnis
•
Java 3DTM API Tutorial
•
http://webster.fhshagenberg.ac.at/staff/haller/mmp5_20012002/08java3d_1.pdf
•
http://www.mathematik.unimuenchen.de/~vrmlsem/old/1999wi/Vortraege/Farbmodelle/Farbm
odelle.html
•
http://multimedia.informatik.uniaugsburg.de/lehre/ss02/MMVL/Folien/Bild&Graphik-4-IV.pdf
•
http://www.fh-wedel.de/~ko/Galerie/2000-WSSeminar/Moeller/index.htm
•
http://escience.anu.edu.au/lecture/cg/Illumination/index.en.html
•
http://escience.anu.edu.au/lecture/cg/IlluminationJ3D/index.en.ht
ml

Präsentation_CarinaFleck