# Kleines Beispiel zum Thema Java 3D



## Thomas Darimont (10. September 2008)

Hallo,

wer schon immer mal mit Java 3Dherumspielen wollte, findet im aktuellen Java Magazin 10.08: http://it-republik.de/jaxenter/java-magazin-ausgaben/Eclipse-%E0-la-carte-000269.html eine kleine leichtverständliche Einführung mit entsprechendem Beispielcode.
Lädt man sich die Java3D Library von: https://java3d.dev.java.net/ (darauf achten, die nativen Bibliotheken entsprechend mit anzugeben...  Bei Eclipse siehe hier:
http://www.tutorials.de/forum/java/262099-jogl-und-eclipse.html , ansonsten muss man die Anwendung mit dem JVM Property -D_java.library.path=/path/to/native/libs starten_)
 kann man mit ein wenig Beispielcode:

```
/**
 * 
 */
package de.tutorials;

import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.TransformGroup;
import javax.swing.JFrame;
import javax.vecmath.Point3d;

import com.sun.j3d.utils.behaviors.keyboard.KeyNavigatorBehavior;
import com.sun.j3d.utils.behaviors.mouse.MouseRotate;
import com.sun.j3d.utils.behaviors.mouse.MouseTranslate;
import com.sun.j3d.utils.behaviors.mouse.MouseZoom;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.SimpleUniverse;

/**
 * @author Thomas.Darimont
 * 
 */
public class Java3DExample extends JFrame{

    public Java3DExample(){
        super("Java3DExample");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        Canvas3D canvas = new Canvas3D(SimpleUniverse
                .getPreferredConfiguration());
        canvas.setSize(320, 240);
        SimpleUniverse simpleUniverse = new SimpleUniverse(canvas);
        simpleUniverse.getViewingPlatform().setNominalViewingTransform();
        
        BranchGroup rootBranchGroup = new BranchGroup();
        TransformGroup rootTransformGroup = new TransformGroup();
        rootBranchGroup.addChild(rootTransformGroup);
        rootTransformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
        ColorCube colorCube = new ColorCube();
        rootTransformGroup.addChild(colorCube);
        
        BoundingSphere boundingSphere = new BoundingSphere(new Point3d(0,0,0),100);
        
        MouseRotate mouseRotate = new MouseRotate();
        mouseRotate.setTransformGroup(rootTransformGroup);
        mouseRotate.setSchedulingBounds(boundingSphere);
        rootBranchGroup.addChild(mouseRotate);

        MouseTranslate mouseTranslate = new MouseTranslate();
        mouseTranslate.setTransformGroup(rootTransformGroup);
        mouseTranslate.setSchedulingBounds(boundingSphere);
        rootBranchGroup.addChild(mouseTranslate);
        
    
        
        MouseZoom mouseZoom = new  MouseZoom();
        mouseZoom.setTransformGroup(rootTransformGroup);
        mouseZoom.setSchedulingBounds(boundingSphere);
        rootBranchGroup.addChild(mouseZoom);
        
        KeyNavigatorBehavior keyNavigatorBehavior = new KeyNavigatorBehavior(rootTransformGroup);
        keyNavigatorBehavior.setSchedulingBounds(boundingSphere);
        rootBranchGroup.addChild(keyNavigatorBehavior);
        
        rootBranchGroup.compile();
        
        simpleUniverse.addBranchGraph(rootBranchGroup);
        
        
        add(canvas);
        pack();
        setVisible(true);
    }
    
    /**
     * @param args
     */
    public static void main(String[] args) {
        new Java3DExample();
    }

}
```

...einen Farbwürfel erzeugen den man mit der Maus / Tastatur drehen und verkleinern kann (+/-)

Gruß Tom


----------



## w-cker (13. November 2008)

Hier unter Mac-OS und Eclipse 3.4 war es nicht erforderlich, separate Java3D- oder Jogl-Bibliotheken oder -Nativpfade anzugeben. Allerdings funktionierte das Beispiel nur nach dem Hinzufügen folgender Zeilen:


```
rootTransformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
rootTransformGroup.setCapability(TransformGroup.ENABLE_PICK_REPORTING);
```

Ansonsten gab es eine javax.media.j3d.CapabilityNotSetException: Group: no capability to get transform.


----------

