Licht . . . und Schatten Richard Göbel
Licht in Java3D - Basisideen Bereitstellung unterschiedlicher Lichtquellen Definition der Wirkung einer Beleuchtung auf Objekte durch Material-Objekte für Appearances Berechnung der wahrgenommenen Farbe in Abhängigkeit von: der Farbe der Oberfläche der Farbe des Lichts Positionen von Lichtquelle, Objekt und Beobachter
Material-Objekte modellieren nur einige Aspekte der Lichtreflektion: Vereinfachungen Eine Lichtquelle enthält nur bis zu drei Farben (RGB) und kein kontinuierliches Spektrum Material-Objekte modellieren nur einige Aspekte der Lichtreflektion: keine Rauheit keine spiegelnden Flächen Nur direkte Beleuchtung wird berücksichtigt: kein Schatten keine Abbildung von Objekten auf anderen Objekten
Typen von Lichtquellen
Ambient & Directional Light - Programmcode AmbientLight ambLight = new AmbientLight(true,new Color3f(1f,1f,1f)); ambLight.setInfluencingBounds( new BoundingSphere(new Point3d(0,0,0),10)); objRoot.addChild(ambLight); DirectionalLight dirLight = new DirectionalLight(new Color3f(1,0,0), new Vector3f(-1,0,0)); dirLight.setInfluencingBounds( new BoundingSphere(new Point3d(0,0,0),10)); objRoot.addChild(dirLight);
PointLight - Programmcode Argumente Farbe Position Abnahme PointLight poiLight = new PointLight(new Color3f(0f, 1f, 0f), new Point3f(-1f,0,0), new Point3f(0f,0f,1f)); poiLight.setInfluencingBounds(new BoundingSphere(new Point3d(0,0,0),10)); objRoot.addChild(poiLight);
SpotLight - Programmcode Argumente: Farbe Position Abnahme Richtung Öffnungswinkel Abnahme zum Rand des Kegels SpotLight spoLight = new SpotLight(new Color3f(0f,0f,1f), new Point3f(0f,1f,0f), new Point3f(0f,0f,1f), new Vector3f(0f,-1f,0f), (float) (Math.PI/8), 0f); spoLight.setInfluencingBounds(new BoundingSphere(new Point3d(0,0,0),10));
Beispiel für eine Szene mit Lichtquellen
Material-Objekt - Beleuchtungsbereiche
Material-Objekt - Parameter „Shininess“ Wert: 1 Wert: 64 Wert: 128
Material-Objekt - Programmcode Appearance ap = new Appearance(); Material ma = new Material(); ma.setShininess(16f); ma.setAmbientColor(0.2f, 0.2f, 0f); ma.setDiffuseColor(1f, 1f, 0f); ma.setEmissiveColor(0f, 0f, 0f); ma.setSpecularColor(1f, 1f, 0.8f); ap.setMaterial(ma); Sphere sphere = new Sphere(0.4f,ap);
Simulation eines Schatten - Darstellung
Simulation eines Schatten - Programmcode TransformGroup transShadow = new TransformGroup(); trans.addChild(transShadow); Transform3D matrixShadow = new Transform3D(); matrixShadow.setTranslation(new Vector3f(0f,height+0.01f,0f)); transShadow.setTransform(matrixShadow); Cylinder shadow= new Cylinder(radius,0,ap1); transShadow.addChild(shadow); DirectionalLight dirLight = new DirectionalLight(new Color3f(1,1,1), new Vector3f(0,-1,-1)); dirLight.setInfluencingBounds(new BoundingSphere(new Point3d(0,0,0),10)); objRoot.addChild(dirLight); dirLight.addScope(box); dirLight.addScope(sphere);