Shape3D und Licht

Status
Nicht offen für weitere Antworten.

Creativ

Aktives Mitglied
Hi,
Habe schon wieder ein Problem...

Und zwar wollte ich spaßeshalber gerade mal versuchen etwas Licht zu meinen Universum hinzuzufügen :D
Ich füge jetzt mit der folgenden Methode Licht hinzu:
Code:
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:
Code:
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

Top Contributor
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.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben