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

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
 
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:

Java:
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
 
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.
 
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:
Java:
/**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);
		
	}
 

Anhänge

  • screenshot_ohne_licht.jpg
    screenshot_ohne_licht.jpg
    62,6 KB · Aufrufe: 37
  • screenshot_mit_licht.jpg
    screenshot_mit_licht.jpg
    65,5 KB · Aufrufe: 49
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
 
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....
 
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.
 

Zurück
Oben