# Shape3D und Licht



## Creativ (30. Mrz 2008)

Hi,
Habe schon wieder ein Problem...

Und zwar wollte ich spaßeshalber gerade mal versuchen etwas Licht zu meinen Universum hinzuzufügen  
Ich füge jetzt mit der folgenden Methode Licht hinzu:

```
public BranchGroup addLight() {
		BranchGroup bg = new BranchGroup();
		
		// Light-Bounds
		BoundingSphere lightBounds = new BoundingSphere(new Point3d(-3.0f,3.0f,-10.0f),30.0f);
		Color3f lightColor = new Color3f (1.0f, 1.0f, 1.0f);
		Vector3f lightDirection = new Vector3f (0.4f, -0.2f, -0.5f);
		
		DirectionalLight light = new DirectionalLight(lightColor,lightDirection);
        light.setInfluencingBounds(lightBounds);
        bg.addChild(light);
		
        AmbientLight ambientLightNode = new AmbientLight (lightColor);
    	ambientLightNode.setInfluencingBounds(lightBounds);
    	bg.addChild(ambientLightNode);
    	
		
		bg.compile();
		return bg;
	}
```

Außerdem habe ich dann noch mit folgender Funktion 2 Planeten hinzugefügt:

```
public BranchGroup addPlanet(Vector3f trans) {
		BranchGroup bg = new BranchGroup();
		Transform3D movePlanet = new Transform3D();
		movePlanet.setTranslation(trans);
		
		TransformGroup transG = new TransformGroup(movePlanet);
		
		Appearance app = new Appearance();
		Material mat = new Material();
		mat.setAmbientColor(new Color3f(1.0f, 0.89f, 0.0f));
		mat.setDiffuseColor(new Color3f(0.7f,0.7f,0.7f));
		mat.setSpecularColor(new Color3f(0.7f,0.7f,0.7f));
		
		app.setMaterial(mat);
        Sphere planet = new Sphere(1.0f,app);
        
        transG.addChild(planet);
        bg.addChild(transG);
        
		bg.compile();
		return bg;
	}
```

Das funktioniert auch alles soweit. Die Planeten werden schön beleuchtet und sieht auch gut aus.

Jetzt wollte ich aber noch, dass ein Shape3D-Objekt mit meiner Geometry beleuchtet wird.
Habe also testweise mal einen Würfel mit Hilfe von IndexedQuadArray erstellt. Habe in dem IndexedQuadArray keine Farbe hinzugefügt.
Danach erstelle ich aus dem IndexedQuadArray eine Shape3D und füge der die gleiche Appearance wie bei dem Planeten hinzu.

Jetzt wird der Würfel aber einfach nur Weiß angezeigt. Es wird also das Material einfach ignoriert. Wenn ich der Appearance noch ein ColoringAttribute anfüge, wird die Farbe vom ColoringAttribute genommen. Also die Appearance wird nicht ignoriert, nur das Material, aber ich füge das Material auch der Appearance hinzu.

Die Shape3D liegt auch im Einflussbereichs des Lichtes. Wenn ich den Planeten an die gleiche Position packe, wird er beleuchtet.

Hat einer von euch eine Idee woran das liegen könnte?

Gruß,
Dennis


----------



## Illuvatar (30. Mrz 2008)

Du musst dir die Normalen generieren lassen. Die kannst du entweder "manuell" dem GeometryArray hinzufügen, oder du verwendest einen NormalGenerator. Damit du den verwenden kannst, brauchst du ein GeometryInfo - Objekt. Du kannst dir entweder das GeometryInfo aus dem GeometryArray generieren lassen, oder du baust das GeometryInfo direkt. Auf jeden Fall verwendest du dann generateNormals und holst dir aus dem GeometryInfo dein fertiges GeometryArray.


----------



## Creativ (30. Mrz 2008)

Hi,
Funktioniert jetzt 
Danke!


----------

