Hallo,
ich bin gerade dabei meine ersten Gehversuche mit Java3D zu wagen. Dabei bin ich auf ein problem gestossen bei dem ich trotz intensiver Suche nicht darauf gekommen bin warum es nicht funktioniert.
Bei untenstehendem Code wird nichts angezeigt. Obwohl ich den Scenegraph (wahrscheinlich) richtig aufgebaut habe (Geometrie, Licht, View, alles vorhanden).
Könnte sich das bitte kurz mal jemand durchsehen und mir einen Tipp geben?
Danke und Grüsse,
Egon
ich bin gerade dabei meine ersten Gehversuche mit Java3D zu wagen. Dabei bin ich auf ein problem gestossen bei dem ich trotz intensiver Suche nicht darauf gekommen bin warum es nicht funktioniert.
Bei untenstehendem Code wird nichts angezeigt. Obwohl ich den Scenegraph (wahrscheinlich) richtig aufgebaut habe (Geometrie, Licht, View, alles vorhanden).
Code:
import java.applet.Applet;
import java.awt.Color;
import java.awt.BorderLayout;
import java.awt.GraphicsConfiguration;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.geometry.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.image.*;
public class Uni
extends Applet
{
private SimpleUniverse universe_ = null;
public Uni()
{
}
public void init()
{
setLayout( new BorderLayout() );
GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
Canvas3D canvas = new Canvas3D( config );
add( "Center", canvas );
universe_ = new SimpleUniverse( canvas );
universe_.getViewingPlatform().setNominalViewingTransform();
universe_.addBranchGraph( createSceneGraph() );
}
public void destroy()
{
universe_.cleanup();
}
private BranchGroup createSceneGraph()
{
BranchGroup rootBranchGroup = new BranchGroup();
Appearance ap = new Appearance();
ap.setMaterial( new Material() );
Shape3D shape = new Shape3D( createGeometry(), ap );
Transform3D tr = new Transform3D();
tr.setScale( 0.25 );
TransformGroup tg = new TransformGroup( tr );
tg.addChild( shape );
PointLight light = new PointLight( new Color3f( Color.green ), new Point3f( 3f, 3f, 3f ), new Point3f( 0, 0, 0 ));
AmbientLight light2 = new AmbientLight( new Color3f( Color.red ));
rootBranchGroup.addChild( light );
rootBranchGroup.addChild( light2 );
rootBranchGroup.addChild( tg );
rootBranchGroup.compile();
return rootBranchGroup;
}
private Geometry createGeometry()
{
IndexedTriangleArray ita = new IndexedTriangleArray( 4, TriangleArray.COORDINATES | TriangleArray.NORMALS, 12 );
ita.setCoordinate( 0, new Point3f( 1f, 1f, 1f ));
ita.setCoordinate( 1, new Point3f( 1f, -1f, -1f ));
ita.setCoordinate( 2, new Point3f( -1f, 1f, -1f ));
ita.setCoordinate( 3, new Point3f( -1f, -1f, 1f ));
int[] coords = { 0, 1, 2, 0, 3, 1, 1, 3, 2, 2, 3, 0 };
float n = ( float ) ( 1.0 / Math.sqrt( 3 ));
ita.setNormal( 0, new Vector3f( n, n, -n ));
ita.setNormal( 1, new Vector3f( n, -n, n ));
ita.setNormal( 2, new Vector3f( -n, -n, -n ));
ita.setNormal( 3, new Vector3f( -n, n, n ));
int[] norms = { 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3 };
ita.setCoordinateIndices( 0, coords );
ita.setNormalIndices( 0, norms );
return ita;
}
public static void main( String[] args )
{
new MainFrame( new Uni(), 400, 400 );
}
}
Könnte sich das bitte kurz mal jemand durchsehen und mir einen Tipp geben?
Danke und Grüsse,
Egon