I am trying to create a 3D-model of the solar system using Java 3D, I am very new to Java 3D, Java and programming in general so I may be missing something really obvious.

I need to to write behaviours which are active constantly in order to maintain the relations between objects when "off-screen", I have tried to do this using the BoundingLeaf node attached to the ViewingPlatform and to a Background as suggested in the 3D Tutorial chapter 3, then I set the bounds of my behaviour to this bounding leaf. This compiles o.k and renders but the behaviour never wakes up.

I would be very grateful for any help as to where I'm going wrong.

Cheers
Jenni.

-- 
x
 

 

import java.lang.Math;
import java.applet.Applet;
import java.awt.BorderLayout;
import java.lang.Math;
import java.awt.Frame;
import java.awt.event.*;
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.*;

public class EarthOrb extends Applet{

        public EarthOrb(){
                setLayout(new BorderLayout());

                Canvas3D canvas3D = new Canvas3D(null);
                add("Center", canvas3D);

                //Create Simple Universe
                SimpleUniverse simpleU = new SimpleUniverse(canvas3D);

                //Set viewing platform geometry including Bounding Leaf
                BoundingLeaf boundingLeaf = new BoundingLeaf();
                PlatformGeometry platformGeom = new PlatformGeometry();
                platformGeom.addChild(boundingLeaf);
                platformGeom.compile();
                simpleU.getViewingPlatform().setPlatformGeometry(platformGeom);

                //Get and Set viewing platform transform
                TransformGroup vpTrans = null;
                vpTrans = simpleU.getViewingPlatform().getViewPlatformTransform();

                Vector3f translate = new Vector3f();
                translate.set(0.0f,0.0f,16.0f);

                Transform3D T3D = new Transform3D();
                T3D.setTranslation(translate);

                vpTrans.setTransform(T3D);

                //Call function to create content branchs and compile.
                BranchGroup scene = new BranchGroup();
                scene.addChild(createSunGraph());

                BranchGroup earth = new BranchGroup();
                TransformGroup ETrans = createEarthGraph();

                //add Background to content branch group
                Background backg = new Background(1.0f, 1.0f, 1.0f);
                backg.setApplicationBoundingLeaf(boundingLeaf);
                scene.addChild(backg);

                //Add behaviour to earth Branch Group
                OrbitBehavior earthOrbit = new OrbitBehavior(ETrans);
                earthOrbit.setSchedulingBoundingLeaf(boundingLeaf);
                ETrans.addChild(earthOrbit);
                earth.addChild(ETrans);

                //Add to content branch group
                scene.addChild(earth);


                scene.compile();

                //add content Branch
                simpleU.addBranchGraph(scene);
                }



        public BranchGroup createSunGraph(){
                // Create root of Sun Branch
                BranchGroup objRoot = new BranchGroup();

                Sphere sphere = new Sphere(0.695f);
                Color3f sunColor = new Color3f(1.0f, 0.7f, 0.3f);

                //give default appearance and material
                Appearance appear = new Appearance();
                Material material = new Material();

                material.setSpecularColor(sunColor);
                material.setAmbientColor(sunColor);
                material.setDiffuseColor(sunColor);
                material.setEmissiveColor(sunColor);

                appear.setMaterial(material);
                sphere.setAppearance(appear);
                objRoot.addChild(sphere);

                //add PointLight
                PointLight lightP = new PointLight();
                objRoot.addChild(lightP);

                return objRoot;
                }




        public TransformGroup createEarthGraph(){
                //Create and set capability of TG

                Transform3D startpos = new Transform3D();
                Vector3d position = new Vector3d(10.536d, 0.0d, -10.536d);
                startpos.setTranslation(position);

                TransformGroup orbit = new TransformGroup(startpos);
                orbit.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);

                //Create the earth and color it
                Sphere sphere = new Sphere(0.064f);
                Color3f earthColor = new Color3f(0.0f, 1.0f, 1.0f);

                Appearance appear = new Appearance();
                Material material = new Material();

                material.setSpecularColor(earthColor);
                material.setAmbientColor(earthColor);
                material.setDiffuseColor(earthColor);
                material.setEmissiveColor(earthColor);

                appear.setMaterial(material);
                sphere.setAppearance(appear);
                orbit.addChild(sphere);

                return orbit;
                }
}






import java.lang.Math;
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.event.*;
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 java.util.Enumeration;

public class OrbitBehavior extends Behavior{
                private TransformGroup targetTG;
                private Transform3D set_pos = new Transform3D();
                private double angle = 45;


                public OrbitBehavior(TransformGroup targetTG){
                        this.targetTG = targetTG;
                        }

                public void initialize(){
                        this.wakeupOn(new WakeupOnElapsedTime(100));
                        }

                public void processStimulus(Enumeration Criteria){

                        System.out.println("processStimulus reached");

                        Vector3d co_ords = new Vector3d(proceedOrbitCo_ords());
                        set_pos.setTranslation(co_ords);
                        targetTG.setTransform(set_pos);

                        this.wakeupOn(new WakeupOnElapsedTime(100));
                        System.out.println("reset of behavior");

                        return;
                        }

                private Vector3d proceedOrbitCo_ords(){
                        double x, y, z;

                        if((angle + 360/365.25) < 360)
                                angle += 360/365.26;
                        else
                                angle += (360/365.25)-360;

                        x = Math.sin(angle)*14900;
                        z = Math.cos(angle)*14900;
                        y = 0;

                        Vector3d co_ord = new Vector3d(x,y,z);

                        return co_ord;
                        }
}






Reply via email to