Probleme beim Texturladen für 3ds

Started by Andi1804, September 03, 2007, 06:13:59 PM

Previous topic - Next topic

Andi1804

Hallo,
ich hab hier ein Problem mit ner Funktion und ich komm einfach nicht dahinter, vermutlich was ganz simples.
Ich will eine Funktion schreiben, an die ich einen Dateinamen, einen Skalierungsfaktor und einen Array mit Texturdateinamen übergeben kann.
Diese soll mir das alles Laden, meiner Welt hinzufügen usw.

Bisher sieht das so aus:


public static Object3D [] load3ds(String dateiname, float skalierung, String Texturdateinamen []){
// 1. Teil:
for (int c = 0; c<Texturdateinamen.length; c++){
Main.texman.getInstance();
Texture d = new Texture(Texturdateinamen[c]);
Main.texman.addTexture(Texturdateinamen[c], d); //<----- PROBLEM ! ! !
}

//2. Teil
Object3D  a [] = Loader.load3DS(dateiname, skalierung);
System.out.println("Länge: "+a.length);
for (int b = 0; b < a.length; b++){
a[b].build();
Main.world.addObject(a[b]);

}


Wenn ich nur den zweiten Teil laufen lasse, funktioniert das ganze wunderbar.
Beim ersten Teil bringt er mir bei der Zeile:

Main.texman.addTexture(Texturdateinamen[c], d);

eine Null Pointer Exception.

Hat jemand ne Idee woran das liegen kann?

Und noch was anderes: Wie kann ich die Texturen im Manager dem 3ds Level zuordnen,
einfach mit setTexture?


mfg

Andi

EgonOlsen

Konnte nicht früher antworten, wegen einer Woche Urlaub...
Also dieser Teil hier:


Main.texman.getInstance();
Texture d = new Texture(Texturdateinamen[c]);
Main.texman.addTexture(Texturdateinamen[c], d); //<----- PROBLEM ! ! !


sieht mir irgendwie komisch aus. Probiert stattdessen mal:


Texture d = new Texture(Texturdateinamen[c]);
TextureManager.getInstance().addTexture(Texturdateinamen[c], d);


Was die Zuorndung zum 3DS angeht, die passiert automatisch und zwar anhand der Texturnamen, die die Texturen im 3DS haben. Beim Laden wird nach gleich benannten Texturen im TextureManager gesucht und diese verwendet. Werden sie nicht gefunden, wird eine Dummy-Textur mit dem Namen erstellt, die später im TextureManager ersetzt werden kann. Das sieht du aber auch in der Log-Ausgabe beim Laden.

Andi1804

Super danke, funktioniert jetzt.

Noch was anderes, ist es irgendwie möglich die Texturkoordinaten eines Object3D zu manipulieren, bzw. neu einzustellen?


Andi1804

Hi, ich hab immer noch ein Problem. Wenn ich die Textur von ner 3ds Datei lade, wird die immer auf größe der Objekte skaliert.
Ich erstelle meine 3ds Dateien mit Blender, es könnte also an dem Exporter liegen.
In Blender jedenfalls, legt er mir die Texturen nebeneinander, also ein Kackeleffekt.
Kann es evtl. daran liegen, dass ich den Softwarerenderer verwende?

mfg

Andi

EgonOlsen

Jein. Vermutlich benutzt du ihn im Legacy-Modus? Kann das sein? Welche Version von jPCT verwendest du? Bis (exklusive) 1.13 war das der Standardmodus für Software. Ab 1.13 ist er es nicht mehr. Ein Screenshot würde vielleicht helfen, damit man besser versteht, was genau du meinst.

Andi1804

Danke für die schnellen Antworten.
Also das mit der Version ist jetzt ne gute Frage, ich hab JPCT jetzt einfach nochmal runtergeladen und die Dateien ersetzt.
Dürfte jetzt also die neueste Version sein.
Hier mal ein Beispiel wegen dem Rendern:
http://mitglied.lycos.de/andi1804/Bildschirmfoto.jpg

Die rechte Seite wurde in Blender, die linke in JPCT gerendert.
Wie man sieht, wiederholt sich die Textur in Blender an der Oberseite des Objekts.
Ich hätte zwar gern, dass dies für alle Seiten gilt, aber da is das Problem in Blender, erstmal wär ich schon zufrieden, wenn es in JPCT auch so aussehen würde. Möglicherweise liegt es aber auch an dem 3ds Exporter von Blender.

Andi

EgonOlsen

Kannst es stattdessen mal mit dem obj-Format probieren?

Andi1804

Also ich habs grad mit obj Format versucht, erstmal erkennt er da die Texturen nicht selbstständig.
Wenn ich die Textur dann mit setTexture zuweise, siehts genauso aus wie beim 3ds Modell, uv Koordinaten sind also vorhanden.

EgonOlsen

Kannst du mir die 3DS-Datei mal irgendwie zukommen lassen? (Und um bei OBJ die Texturnamen zu bekommen, musst du die *.mtl-Datei mit angeben, aber das nur nebenbei). Ich muss mir das Ding glaube ich mal selber anschauen, um zu erkennen, was das verkehrt läuft.


EgonOlsen

Ok, also wenn ich das Teil in Deep Exploration lade (und der macht nach 3DS selber am meisten richtig, wenn es um dieses Format geht), dann erscheint es so, wie auch jPCT es lädt. Ich denke mal, da stimmt irgendwas mit dem Export in Blender nicht. Irgendwo hier im Forum findet sich auch die (sicherlich nicht 100% ernst gemeinte, aber dennoch begründete) Aussage, dass alles in Blender reingeht, aber nichts mehr rauskommt. Vielleicht ist das in diesem Fall auch so...

Andi1804

Ok, danke dir, dann werd ich mich mal nach nem anderen Programm umsehen.

EgonOlsen

Was kommt denn raus, wenn du das exportierte Teil in Blender wieder importierst?

Andi1804

Verdammt auf die Idee hätt ich auch mal kommen können.
Habs grad ausprobiert, er rendert es wie in IPCT.
Liegt also am Exporter.
Sorry für den ganzen aufwand.