3DS zur TransformGroup

Highchiller

Bekanntes Mitglied
Hallo liebe Java-Begeisterten.

Ich habe gerade erst mit Java3D begonnen und bin noch absoluter Newbie.

Kurze Inhaltsangabe:
Ich studiere Mathematik und damit auch ComputerorientierteMathematik. Ich habe Java Grundlagen gelernt und versteh ich mich mittlerweile einigermaßen darauf.
Der Auftrag unserer Gruppe besteht nun darin, ein Spiel in 3D zu programmieren. (Das Spiel ist übrigens Hive, falls das wer kennt)

Ich wollte nun erst mal eine 3DS-Datei (von einem Freund erstellt) völlig normal darstellen und nach Möglichkeit auch drehen. Dazu habe ich eine wunderbare Beispieldatei gefunden über Wikipedia. Diese wollte ich einfach anpassen und so meine Datei statt einem vorgegebenen Würfel anzeigen lassen.

Hier erst mal mein Code:
Java:
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GraphicsConfiguration;

import javax.media.j3d.AmbientLight;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.DirectionalLight;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.vecmath.Color3f;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3f;

import com.microcrowd.loader.java3d.max3ds.Loader3DS;
import com.sun.j3d.loaders.Scene;
import com.sun.j3d.loaders.objectfile.ObjectFile;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.behaviors.mouse.MouseRotate;
import com.sun.j3d.utils.geometry.Box;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.SimpleUniverse;
import com.sun.j3d.loaders.Loader;

public class HelloUniverse2 extends Applet {
	public static void main( String[] args ){
		new MainFrame( new HelloUniverse2(), 100, 100 );
	}
	
	public HelloUniverse2(){
		setLayout( new BorderLayout() );
		
		GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
		Canvas3D c = new Canvas3D( config );
		add( "Center", c );	
		
		SimpleUniverse simpleUniverse = new SimpleUniverse( c );
		simpleUniverse.getViewingPlatform().setNominalViewingTransform();
		
		BranchGroup branchGroup = createSceneGraph();
		simpleUniverse.addBranchGraph( branchGroup );
	}
	
	public BranchGroup createSceneGraph(){		
		Loader3DS loader = new Loader3DS();
		Scene scene = null;
		
		try{
			scene = loader.load( "C:/Users/Andre/eclipse/3Tests/CopyOfPieceQueenW.3DS" );
		} catch (Exception e){
			e.printStackTrace();
		}
		
		BranchGroup objRoot = new BranchGroup(); 
		objRoot.addChild( scene.getSceneGroup() );
		
		Transform3D zTrans = new Transform3D( );
		zTrans.set( new Vector3f( 0.0f,0.0f,-10.0f ) );
		TransformGroup objTrans = new TransformGroup( zTrans  );
		
		objRoot.addChild( objTrans );
		
		BoundingSphere bounds = new BoundingSphere( new Point3d(0.0,0.0,0.0), 100.0 );
		MouseRotate behavior = new MouseRotate( objTrans );
		
		objTrans.addChild( behavior );
		behavior.setSchedulingBounds( bounds );
		
		objTrans.setCapability( TransformGroup.ALLOW_TRANSFORM_WRITE );
		objTrans.setCapability( TransformGroup.ALLOW_TRANSFORM_READ );
		
		AmbientLight light = new AmbientLight(true, new Color3f(Color.WHITE));
		
		objRoot.addChild( light );
		objRoot.compile();
		
		return objRoot;
	}
}

Also ich habe halt erst mal die Datei geladen. Das hat schon lang genug gedauert :D
Jetzt habe ich keine Fehlermeldung und er startet das Applet einwandfrei. Leider sieht man nichts als Schwärze. Und mit der Maus kann ich nichts machen.

Meine Vermutung ist momentan, es liegt daran dass ich das "Ding" nicht bewegen kann und deshalb irgendwie nichts sehe. Und mir fiel auf das ich das "Ding" ja noch gar nicht zur TransformGroup geaddet habe. Daran scheiter ich auch gerade.

Aber ich kann mir gut vorstellen, dass es an etwas ganz anderem liegt. :rtfm:

Nun ich hoffe ihr könnt mir helfen :)
Schöne Grüße, Highchiller
 

Marco13

Top Contributor
Wird auf der Java-Konsole irgendwas ausgegeben? (Kannst das Applet auch in einen MainFrame packen und als Applikation starten, da könnte das Debugging einfacher sein). Wenn du statt des geladenen Objektes (GENAU an der gleichen Stelle) einen Würfel oder so einfügst, sieht man den dann?
 

Highchiller

Bekanntes Mitglied
Ah es funktioniert, doofer Fehler.
Ich musste das Objekt an die TransformGroup anhängen und nicht an die BranchGroup.
Jetzt wird auch alles fein angezeigt und ich kanns drehen :)

Vielen Dank für die Hilfe
 

Ähnliche Java Themen


Oben