FB18 - Das Forum für Informatik

fb18.de / Off-Topic / Hard- und Softwarefragen

Java3D: Hintergrundbild

Java3D: Hintergrundbild 2011-11-15 03:19
Stefan1971HH
Hi,
ich möchte mich in Eclipse obiger Methode bedienen. [Background.setImage (ImageComponent2D image)]
Wie muss ich (syntaktisch)den Pfad zu einer auf Platte liegenden jpg.-Datei angeben, und geht es nur, wenn die Datei im Workspace im zugehörigen Projektordner liegt?
Kann das Bild (nach korrekter Pfadangebe) direkt der setImage-Methode übergeben werden,
oder muss eine weitere Methode "dazwischengeschaltet" werden, um daraus ein Objekt vom
Typ ImageComponent2D zu erzeugen (etwa, so wie man bei Bildern, die als Textures von Oberflächen verwendet werden, einen TextureLoader anlegen, diesem dann die .jpg- Datei übergeben und schliesslich auf ihm die Methode getImage aufrufen muss)?

danke

RE: Java3D: Hintergrundbild 2011-11-15 16:42
Stefan1971HH
Ein hilfsbereiter Kommilitone hat mir erklärt, dass die Methode "ImageIO.read(File file)" fehlte.
Jetzt erhalte ich zwar ich keine Fehlermeldung mehr, aber das Bild wird nicht angezeigt
(sondern nur ein Frame mit Standard-schwarzem Hintergrund)
Mein Code in der Main-Methode sieht jetzt so aus:

public static void main(String[] args) throws IOException  {
            Frame frame = new Frame();
            frame.setSize(640,480);
            frame.setLayout(new BorderLayout());
            GraphicsConfiguration config =
                SimpleUniverse.getPreferredConfiguration();
                Canvas3D heaven = new Canvas3D(config);
            frame.add("Center",heaven);
            SimpleUniverse universe = new SimpleUniverse(heaven);
            universe.getViewingPlatform().setNominalViewingTransform();
            ImageComponent2D image =  new ImageComponent2D
            (1, ImageIO.read(new File("c:\\bild.jpg")));
            Background b = new Background ();
            b.setImage (image);
            BranchGroup celestialBodies = new BranchGroup();
            celestialBodies.addChild(b);
            universe.addBranchGraph (celestialBodies);
            frame.show();

Müssen evtl. die Abmessungen des Bildes vorab angepasst werden?
(Woran liegt es übrigens, dass die erzeugten Frame-Fenster sich nicht wieder schliessen lassen?)

danke

RE: Java3D: Hintergrundbild 2011-11-15 18:00
Slater
zum Schließen:
ein Frame braucht einen WindowListener
http://www.tutorials.de/java/221830-java-hasst-mich-windowlistener.html
Swing-JFrame ist bisschen besser, auf
> setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
sollte man dennoch nicht verzichten

RE: Java3D: Hintergrundbild 2011-11-15 23:39
Stefan1971HH
Danke für den Tip mit JFrame.-
Wie derselbe hilfsbereite Kommilitone jetzt entdeckt hat, lag das Problem
des fehlenden Hintergrundbildes daran, dass ich versäumt hatte, mit
"Background.setApplicationBounds(Bounds)" explizit den Anwendungsbereich
des Hintergrundes festzulegen.
(API: "A Background node is active when its application region intersects the ViewPlatform's activation volume. […] If no Background nodes are active, then the window is cleared to black.")
Aufgrund der bisher von mir über Java3D zu Rate gezogenen Quellen hatte ich angenommen,
dass man sich um solche Parameter nicht weiter kümmern muss,
wenn man ein SimpleUniverse (und dabei nicht explizit Behaviors) benutzt.