Java3D - Textur laden geht nicht

Java3D_Noob

Mitglied
Hallo Community 🙂

Ich hab mal wieder eine Frage 😀
Erstmal der Quelltext:

[Java]
//[...]

Sphere sonne = new Sphere(0.15f,1,40,texturSonne());

TransformGroup sonnenVerschieber = new TransformGroup();
Transform3D verschieben = new Transform3D();
verschieben.setTranslation(new Vector3f(-0.75f, 0.45f, 0f));
sonnenVerschieber.setTransform(verschieben);
sonnenVerschieber.addChild(sonne);

szene.addChild(sonnenVerschieber);

//[...]

private static Appearance texturSonne() {

BufferedImage bildKriegen = null;
try{
bildKriegen = ImageIO.read(new File("C:\\Users\\*****\\Desktop\\sonne.jpg"));
}catch (Exception e){}

TextureLoader bildLader = new TextureLoader(bildKriegen);
ImageComponent2D bild = bildLader.getImage();

Texture2D dieTextur = new Texture2D(Texture2D.BASE_LEVEL,Texture2D.RGBA,340,300);
dieTextur.setImage(0, bild);
dieTextur.setEnable(true);

Appearance textur = new Appearance();
textur.setTexture(dieTextur);

return textur;

//[...]

[/Java]

Ich wollte den gelben Kreis, der bisher meine Sonne darstellte eben durch ein Bild von einer Sonne ersetzten. So bisschen gegoogelt und dann zu diesem Quelltext gekommen. Was bei anderen funktioniert, funktioniert bei mir mal wieder nicht -.- 😀
Wenn ich das compile, dann sehe ich das Bild nicht, sondern nur wieder den ursprünglichen Kreis, aber in weiß.

Was mache ich falsch?

Liebe Grüße 🙂
 
Zunächst mal solltest du den catch Block nicht leer lassen, da gehört mindestens ein
Code:
e.printStacktrace();
rein.

Was Marco13 mit "Pokemon-Exception-Handling" meint: Du solltest nicht einfach alles abfangen, sondern immer nur die Exceptions, die auch auftreten können. In deinem Fall wäre das also die IOException.
 
Hm, das sind wohl Anfängerfehler, würde das dann so aussehen?

Java:
catch (Exception IOException) {
IOException.printStackTrace();
}

Aber mal ne dumme Frage, der Fall catch tritt ja nur ein, wenn try nicht klappt. Try klappt aber immer, weil mein File ja vorhanden ist. Also ist es doch eigentlich egal was bei catch steht (außer dass es unsauber programmiert ist).

Und wenn ich da was reinschreibe ändert das ja nichts an meinem Problem. Also weiß einer, was ich jetzt genau ändern muss, damit ich keinen weißen Kreis sondern die Textur angezeigt bekomme? Hab schon viel probiert, z.B. TransparencyAttributes eingefügt und das alles transparent gemacht, aber danach war der weiße Kreis immer noch da, also schätze ich, dass ich irgendwas falsch gemacht habe, oder dass sich das Transparency auf die Textur bezogen hat.

Also, hat jemand eine Idee, wie ich diesen weißen Kreis da weg bekomme und meine Textur da hin? 🙂
 
Zuletzt bearbeitet:
Nein, das würde so ausschauen:
Java:
catch (IOException ioe) {
    ioe.printStackTrace();
}
Schau mal ob da was auf der Konsole ausgegeben wird.
 
Hm, hab jetzt nochmal ein bisschen probiert (gegoogelt xD) und bin zu diesem Quelltext gekommen:
Java:
private static Appearance texturSonne() {
		
		BufferedImage bildKriegen = null;
		try{
			bildKriegen = ImageIO.read(new File("C:\\Users\\*****\\Desktop\\sonne.jpg"));
		}catch (IOException ioe){
			ioe.printStackTrace();
		}
		
		TextureLoader bildLader = new TextureLoader(bildKriegen);
		ImageComponent2D bild = bildLader.getImage();
		
		Texture2D dieTextur = new Texture2D(Texture2D.BASE_LEVEL,Texture2D.RGBA,17,15);
			dieTextur.setImage(0, bild);
			dieTextur.setEnable(true);	
			
		TexCoordGeneration koordinaten = new TexCoordGeneration(TexCoordGeneration.OBJECT_LINEAR, TexCoordGeneration.TEXTURE_COORDINATE_2);	
		
		TextureAttributes eigenschaften = new TextureAttributes();
			eigenschaften.setTextureMode(TextureAttributes.REPLACE);
		
		Appearance textur = new Appearance();
			textur.setTexture(dieTextur);
			textur.setTexCoordGeneration(koordinaten);
			textur.setTextureAttributes(eigenschaften);
		    textur.setMaterial(new Material());

		return textur;
	
	}


Jetzt wird das Bild geladen, aber am Anfang war es viel zu groß (sprich es wurde nur der untere rechte Teil angezeigt), dann hab ichs kleiner gemacht weil ich dachte, dann passt es, aber so war es nicht. Dann war es nur pixeliger, aber es wurde immernoch nur der rechte untere Teil angezeigt. Das hängt bestimmt mit den autogenerated TexturKoordinaten zusammen oder?

Wie krieg ich das ganze Bild angezeigt?

Liebe Grüße 🙂
 
Ja, eine Kugel kann man eben nicht vernünftig mit einer rechteckigen Textur belegen. Es wird also immer mehr oder weniger sch.... aussehen. Evtl. muss man die Texturkoordinaten noch skalieren oder anpassen, damit es weniger sch... aussieht. Aber zugegeben, die Funtkionsweise von dem TexCoordGeneration-Zeug hab' nich auch nicht im Kopf (die JavaDoc ist da ja sehr ausführlich). Vielleicht würde ein KSKB helfen (Sowas wie Texture: picture ball : Texture3DJava könnte da als Ausgangspunkt dienen, wenn da der gleiche Effekt auftritt).
 

Zurück
Oben