# Java3D: Farbe von Objekten stimmt nicht mit übergebenem RGB-Wert überein



## whitebrazilian (14. Sep 2011)

Hallo,

ich möchte Box-Objekten in Java3D beliebige RGB-Farben übergeben. In einer Tabelle ist eine Zelle, in der die entsprechende Farbe hinterlegt ist, um einen schnellen Vergleich zu erhalten.

Hierzu wird ein awt.Color-Objekt aus den gewünschten RGB-Werten angelegt. Dieses wird einem Color3f-Objekt übergeben, mit dessen Hilfe schließlich ein Material-Objekt erstellt wird und dem Appearance-Objekt übergeben wird.

Leider entsprechen die Farben nicht den übergebenen werten.
Eine bordeauxrote Box erscheint zum Beispiel in deutlich hellerem Rot.

Liegt das an dem Material-Objekt? Oder an den Lichteinstellungen? Oder gibt es eine andere Erklärung?

Viele Grüße


----------



## Marco13 (14. Sep 2011)

whitebrazilian hat gesagt.:


> Liegt das an dem Material-Objekt? Oder an den Lichteinstellungen? Oder gibt es eine andere Erklärung?



Ja, in dieser Reihenfolge  Wie sieht's denn komplett ohne Licht aus?


----------



## whitebrazilian (15. Sep 2011)

Hallo Marco,

Ohne Licht stimmen die Farben. Allerdings geht auf diese Weise der 3D-Charakter ziemlich verloren.

Meine Material-Objekte habe ich folgendermaßen initialisiert:


```
public void setAppearance(Color color) {
		
		
		Color3f color3f = new Color3f();
		color3f.set(color);
		appearance.setMaterial(new Material(color3f,color3f,color3f,new Color3f(0.8f,0.8f,0.8f),
		    	1f));
		this.setAppearance(appearance);
	}
```

Grüße,
Tobi


----------



## Marco13 (15. Sep 2011)

Sicher, das war nur als Test gedacht, weil dann wirklich NUR die "echte" Farbe angezeigt werden sollte. Falls das Licht also keine Farbe hat.... Hm... Screenshots oder das obligatorische KSKB könnten helfen.


----------



## whitebrazilian (15. Sep 2011)

Ich habe Screenshots mit und ohne Licht angehängt.

Mit farblosem Licht meinst du bestimmt weißes Licht oder?

Mein Licht sieht folgendermaßen aus:

```
/**Setting up the light of the scene
	 * 
	 */
	public void setLights(){
		
		BranchGroup bgLights = new BranchGroup();
		BoundingSphere bounds = new BoundingSphere(new Point3d(),1000);
		
		DirectionalLight DLgt=new DirectionalLight(new Color3f (0.8f,0.8f,1.0f),new Vector3f(-0.5f,-1f,-0.5f));
		DirectionalLight DLgt2=new DirectionalLight(new Color3f (0.8f,0.8f,1f),new Vector3f(0.5f,1f,0.5f));
    	
        AmbientLight ALgt = new AmbientLight(new Color3f(0.8f,0.8f,0.8f));

    	DLgt.setInfluencingBounds(bounds);
		DLgt2.setInfluencingBounds(bounds);

		ALgt.setInfluencingBounds(bounds);
		
		bgLights.addChild(DLgt);
		bgLights.addChild(DLgt2);

		bgLights.addChild(ALgt);
		
		rootBranchGroup.addChild(bgLights);
		
	}
```


----------



## Marco13 (15. Sep 2011)

Ja, was jetzt als erstes auffällt ist 
new Color3f (0.8f,0.8f,1.0f)
wo ich eher
new Color3f (1.0f,1.0f,1.0f)
oder
new Color3f (0.8f,0.8f,0.8f)
vermutet hätte, aber der Unterschied ist (im Vergleich zu den anderen Boxes) schon ziemlich deutlich...???:L


----------



## whitebrazilian (15. Sep 2011)

Ich habe beide RGB-Werte ausprobiert und es ändert sich praktisch nichts...
Ich bin auch einigermaßen ratlos.


----------



## Marco13 (15. Sep 2011)

Dass der Ambiente Teil so hoch ist fällt auch auf... aber das erklärt noch nicht den scheinbaren(!?) Unterschied zwischen den Kisten. Könnte auch täuschen, ist schwer zu sagen....


----------



## whitebrazilian (16. Sep 2011)

Ich habe jetzt die Helligkeit des direktionalen Lichts sowie der Materialeigenschaften der Boxen deutlich vermindert, auf diese Weise ist es ok. Ich finde aber, dass das in Java3D nicht sehr gut gelöst ist. Ich befürchte man muss ein kleiner Grafikdesigner sein um die Lichteigenschaften wirklich gut einzustellen.


----------



## Marco13 (16. Sep 2011)

Man kann davon ausgehen, dass es bei den gleichen Einstellungen in reinem OpenGL genauso aussehen würde...


----------

