View
118
Download
0
Category
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