ear members,
I am now learning JAVA 3D graphics and as a first step I like
to make a solar system (earth rotates the sun and the moon rotates both
the earth and sun).
I am struggling with this problem for the past two weeks and I hope you
can help me in this regard.
In my present program, the earth rotates the sun. The moon also rotates
the
sun. But I want to rotate also the MOON TOWARDS EARTH as its rotate the
sun.
The problem is I don't know how to rotate
the moon towards earth and towards sun (it rotates around the sun
alone).
I am sending the source code that I have written for your kind perusal.
Could you please go through the program, modify it as you wish and
send me the corrected version which solves my problem
(make a solar system in Java 3D graphics) or kindly tell me the
changes that I have to make in my program.
I am looking for your kind reply.
Thanking you and
with best regards,
Michael
==========
Code
====
//<applet code="SolarAppMod1" width=800 height=500>
//</applet>
import java.applet.Applet;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.Label.*;
import java.awt.event.*;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.image.TextureLoader;
import com.sun.j3d.utils.behaviors.vp.OrbitBehavior;
import javax.media.j3d.*;
import javax.vecmath.*;
import Axis;
public class SolarAppMod1 extends Applet{
Appearance createAppearance()
{
Appearance app = new Appearance();
String fn = "earth.jpg";
TextureLoader loader = new TextureLoader(fn,this);
ImageComponent2D image = loader.getImage();
Texture2D texture = new
Texture2D(Texture.BASE_LEVEL,Texture.RGBA,
image.getWidth(),image.getHeight());
texture.setImage(0,image);
texture.setEnable(true);
texture.setMagFilter(Texture.BASE_LEVEL_LINEAR);
texture.setMinFilter(Texture.BASE_LEVEL_LINEAR);
Material material = new Material();
material.setShininess(100.0f);
app.setMaterial(material);
app.setTexture(texture);
return app;
}
public BranchGroup createSunEarthScene()
{
BranchGroup scene = new BranchGroup();
//scene.addChild(new Axis());
Transform3D translate = new
Transform3D();
Transform3D rotate = new Transform3D();
//SUN
translate.set(new Vector3f(0.0f, 0.2f, 0.0f));
TransformGroup BallTGT1 = new TransformGroup(translate);
TransformGroup BallTGR1 = new TransformGroup(rotate);
scene.addChild(BallTGT1);
rotate.rotX(Math.PI/180.0d);
BallTGR1.addChild(new Sphere (0.2f,
Sphere.GENERATE_NORMALS, createAppearance()));
BallTGT1.addChild(BallTGR1);
// Earth rotating around the sun
translate.set(new Vector3f(-0.7f, 0.20f, 0.20f));
TransformGroup BallTGT2 = new TransformGroup(translate);
TransformGroup BallTGR2 = new TransformGroup(rotate);
BallTGT2.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
scene.addChild(BallTGT2);
Appearance appear = createAppearance();
rotate.rotZ(Math.PI/5.0d);
BallTGR2.addChild(new
Sphere(0.1f,Primitive.GENERATE_TEXTURE_COORDS,appear));
BallTGT2.addChild(BallTGR2);
BranchGroup gp = new BranchGroup();
TransformGroup objSpin = new TransformGroup();
objSpin.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
gp.addChild(objSpin);
objSpin.addChild(scene);
Transform3D yAxis = new Transform3D();
Alpha rotationAlpha = new Alpha(3, 16000);
RotationInterpolator rotator =
new RotationInterpolator(rotationAlpha,
objSpin,yAxis,0.0f,(float)Math.PI*2.0f);
BoundingSphere bounds =
new BoundingSphere(new Point3d(0.0,0.0,0.0), 10.0);
DirectionalLight light1 = new DirectionalLight();
light1.setInfluencingBounds(bounds);
Vector3f light1Direction = new Vector3f(-1.0f, -1.0f,
-1.0f);
light1Direction.normalize();
light1.setDirection(light1Direction);
light1.setColor(new Color3f(1.0f, 1.0f, 1.0f));
scene.addChild(light1);
DirectionalLight light2 = new DirectionalLight();
light2.setInfluencingBounds(bounds);
Vector3f light2Direction = new Vector3f(1.0f, 1.0f,
1.0f);
light2Direction.normalize();
light2.setDirection(light2Direction);
light2.setColor(new Color3f(0.0f, 1.0f, 0.0f));
scene.addChild(light2);
rotator.setSchedulingBounds(bounds);
objSpin.addChild(rotator);
Background bg = new Background();
bg.setColor(0.05f, 0.05f, 0.2f);
bg.setApplicationBounds(new BoundingSphere());
scene.addChild(bg);
//scene.addChild(new Axis());
gp.compile();
return gp;
}
BranchGroup createMoon()
{
BranchGroup moon = new BranchGroup();
//scene.addChild(new Axis());
Transform3D translate1 = new
Transform3D();
Transform3D tempRotate1 = new
Transform3D();
Transform3D rotate1 = new Transform3D();
//Moon rotating around earth
translate1.set(new Vector3f(-0.9f, 0.20f,
0.25f));
TransformGroup BallTGT3 = new
TransformGroup(translate1);
moon.addChild(BallTGT3);
Appearance appear =
createAppearance();
rotate1.rotZ(Math.PI/2.0d);
TransformGroup BallTGR3 = new
TransformGroup(rotate1);
//rotate1.set(m1);
BallTGR3.addChild(new
Sphere(0.1f,Sphere.GENERATE_NORMALS,createAppearance()));
BallTGT3.addChild(BallTGR3);
BranchGroup gp1 = new
BranchGroup();
TransformGroup objSpin1 = new
TransformGroup();
objSpin1.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
gp1.addChild(objSpin1);
objSpin1.addChild(moon);
Transform3D yAxis = new
Transform3D();
Alpha rotationAlpha1 = new
Alpha(-1,
Alpha.INCREASING_ENABLE,0,0,
4000,0,0,
0,0,0);
RotationInterpolator rotator1 =
new
RotationInterpolator(rotationAlpha1,
objSpin1,yAxis,0.0f,(float)Math.PI*2.0f);
BoundingSphere bounds1 =
new BoundingSphere(new
Point3d(-0.7,0.20,20.0), 0.1);
rotator1.setSchedulingBounds(bounds1);
objSpin1.addChild(rotator1);
gp1.compile();
return gp1;
}
public SolarAppMod1()
{
setLayout(new BorderLayout());
Canvas3D canvas3D = new
Canvas3D(SimpleUniverse.getPreferredConfiguration());
add("Center", canvas3D);
BranchGroup scene = createSunEarthScene();
BranchGroup moon = createMoon();
//scene.addChild(new Axis());
scene.compile();
moon.compile();
SimpleUniverse simpleU = new SimpleUniverse(canvas3D);
simpleU.getViewingPlatform().setNominalViewingTransform();
simpleU.addBranchGraph(scene);
simpleU.addBranchGraph(moon);
}
public static void main(String[] args)
{
Frame frame = new MainFrame(new SolarAppMod1(), 400, 300);
}
}
--
**********************************************************************
Dr. M. Michael Gromiha, Ph.D Tel: 0081-298-36-9082 (Office)
Bio Informatics Lab 0081-298-38-2956 (home)
RIKEN Tsukuba Institute Fax: 0081-298-36-9080
The Institute of Physical and E-mail: [EMAIL PROTECTED]
Chemical Research (RIKEN) [EMAIL PROTECTED]
3-1-1 Koyadai, Tsukuba, Ibaraki 305-0074
JAPAN URL: http://www.rtc.riken.go.jp/~gromiha
**********************************************************************
===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA3D-INTEREST". For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".