j3d import von .obj

bob_sheknowdas

Aktives Mitglied
Hallo,

ich habe mir aus dem Netz lizensfrei ein Blendermodell als .obj runtergeladen und versuche das jetzt in meine java3D Umgebung zu importieren.
Dazu habe ich ebenfalls im Netz eine Anleitung für einen Importer gefunden.
Die sieht in etwa so aus:

Java:
public class ObjLoader extends Applet {

	private static final long serialVersionUID = 1L;
	private String filename;	
	private BranchGroup scene;
	
	public ObjLoader(String s){
		scene = erstelleSzeneGraph();
		scene.compile();
		filename=s;
	}
	
	public BranchGroup erstelleSzeneGraph(){
		BranchGroup objRoot = new BranchGroup();
		
		ObjectFile f = new ObjectFile(ObjectFile.RESIZE | ObjectFile.TRIANGULATE | ObjectFile.STRIPIFY);
		Scene s = null;		
		try {
			s = f.load(filename);			
		} catch (FileNotFoundException e) {
			System.err.println(e);
			System.exit(1);
		} catch (IncorrectFormatException e) {
			System.err.println(e);
			System.exit(1);
		} catch (ParsingErrorException e) {
			System.err.println(e);
			System.exit(1);
		}
		
		BoundingSphere bs = new BoundingSphere(new Point3d(0.0,0.0,0.0) ,100.0);
		objRoot = s.getSceneGroup();
		
		return objRoot;
	}
	
	public TransformGroup getObject(){
		TransformGroup s = new TransformGroup();
		s.addChild(scene);
		return s;
	}
	
}

Mein Problem ist, dass so leider die Texturen nicht mit importiert werden.
Kann da jemand helfen?
 
Zuletzt bearbeitet:

bob_sheknowdas

Aktives Mitglied
Hmm, ich gebe zu dass ich nicht wirklich der Experte bin wenn es um Modellierung geht.
Ein mtl-File war in dem Download enthalten. Schaut die .obj da mit rauf, ja?
Ich kann ja mal meine .mtl hochladen...
 

Anhänge

  • Ghoul - fighter.zip
    117,1 KB · Aufrufe: 2

Marco13

Top Contributor
Hmja, in oder OBJ steht oben
[c]mtllib GhoulOBJ.mtl[/c]
als Verweis auf die MTL-Datei.

Und später wird dann ein Material verwendet, das in dieser MTL-Datei defniert wird:
[c]usemtl _GhoulOBJ_GhoulOBJfull_texture[/c]

Und dieses "_GhoulOBJ_GhoulOBJfull_texture" aus der MTL verweist auf zwei Dateien
Code:
	map_Ka ghoul texture\ghoul_map_tga.tga
	map_Kd ghoul texture\ghoul_map_tga.tga

Daraus kann man sich theoretisch die nötigen Informationen zusammenlutschen. Ich bin nicht sicher ob (bezweifle aber, dass) der OBJ-Loader diese Information auch aufdröselt. Vielleicht macht er das, wenn die Pfade und Dateinamen alle stimmen, aber es würde mich überraschen. Vermutlich ist es am "einfachsten", wenn man die besagten Texturen irgendwie direkt mit Java3D-Mitteln lädt. Wird vermutlich auch noch frickelig, weil man sich von der "Scene" zu den entsprechenden Unterobjekten hangeln und denen irgendwie mit den passenden "Apperances" die Textur zuweisen muss, aber falls das mit der MTL ansonsten nicht funktioniert, ist das immerhin eine Option...
 

bob_sheknowdas

Aktives Mitglied
Also das Verzeichnis + tga-File existieren. Daran kanns also nicht liegen.
Hmm, könntest du deine andere Idee vllt etwas weiter ausführen? Tu am besten so als müsstest du alles einm 8 Jahre alten Kind erklären^^


PS: Mir ist aufgefallen, dass das importierte Model die Performance sehr belastet, vor allem wenn man es bewegen will.
Kann man da irgendwas machen?
 

Marco13

Top Contributor
Was genau ist die Frage? Ich weiß das auch alles nicht "auswendig". Ich würde erstmal schauen, ob sowas wie The simple application of textures : Texture3DJava läuft, und wo da wie die Texturen auf die Objekte geklatscht werden. Dann schauen, was in diesem "Scene"-Knoten, den man vom dem OBJ-Loader bekommt, so alles drin steckt (vermutlich mehrere Shape3Ds irgendwo) und dann versuchen, denen eine Appearance zu verpassen, die die Textur beschreibt. In der Hoffnung, dass der OBJ-Loader wenigstens die Texturkoordinaten mit aus der Datei liest :D
 

Oben