import java.applet.Applet;
import java.applet.AudioClip;
import java.awt.AWTException;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Desktop;
import java.awt.Dimension;
import java.awt.GraphicsConfiguration;
import java.awt.HeadlessException;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.text.NumberFormat;
import javax.imageio.ImageIO;
import javax.media.j3d.AmbientLight;
import javax.media.j3d.Appearance;
import javax.media.j3d.Background;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.DirectionalLight;
import javax.media.j3d.Material;
import javax.media.j3d.PointArray;
import javax.media.j3d.PointAttributes;
import javax.media.j3d.Shape3D;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.vecmath.Color3f;
import javax.vecmath.Point3d;
import javax.vecmath.Vector3f;
import Figures.Rayman_Head;
import com.sun.j3d.utils.behaviors.vp.OrbitBehavior;
import com.sun.j3d.utils.universe.SimpleUniverse;
import com.sun.j3d.utils.universe.ViewingPlatform;
public class Rayman_Maker extends JFrame
{
////////////////Head/////////////////
private float hx,hy,hz;
private Transform3D head;
private TransformGroup Head;
private float headsize=1;
private float rhx,rhy,rhz;
private Transform3D rh1;
private Transform3D rh2;
private Transform3D rh3;
private TransformGroup Rh1;
private TransformGroup Rh2;
private TransformGroup Rh3;
//////////////////////////////////////////////////////////////////////////////////////
public Rayman_Maker()
{
Toolkit tk = Toolkit.getDefaultToolkit();
final Dimension d = tk.getScreenSize();
setSize(d.width,d.height);
setVisible(true);
setIconImage(new ImageIcon("F:/Rayman_Maker_1.0/Icon.jpg").getImage());
setLayout(null);
setVisible(true);
setResizable(false);
setTitle("Rayman_Maker_1.0");
///////////////////////////////////////////
JButton b = new JButton();
b.setBackground(backcolor);b.setBounds(1000,70,100,20);add(b);b.setForeground(forecolor); b.setLabel("Head");
JButton b1 = new JButton();
b1.setBackground(backcolor);b1.setBounds(1000,90,100,20);add(b1);b1.setForeground(forecolor);b1.setLabel("Kopf-Größe");
final JTextField b11 = new JTextField();
b11.setBackground(backcolor);b11.setBounds(1100,90,100,20);add(b11);b11.setForeground(forecolor);
JButton b111 = new JButton();
b111.setBackground(backcolor);b111.setBounds(1200,90,200,20);add(b111);b111.setForeground(forecolor);b111.setLabel("Kopf-Größe aktualisieren");
b111.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e)
{float headsize2 = Integer.parseInt(b11.getText()); headsize2 = headsize; }});
//Translation
JButton trans = new JButton();
trans.setBackground(backcolor);trans.setBounds(1000,110,150,20);add(trans);trans.setForeground(forecolor);trans.setLabel("Kopf Position (x,y,z)");
//
JButton transx = new JButton();
transx.setBackground(backcolor);transx.setBounds(1150,110,45,20);add(transx);transx.setForeground(forecolor);transx.setLabel("X");
final JTextField tae = new JTextField();
tae.setBackground(backcolor);tae.setBounds(1195,110,25,20);add(tae);tae.setForeground(forecolor);
//
JButton transy = new JButton();
transy.setBackground(backcolor);transy.setBounds(1215,110,45,20);add(transy);transy.setForeground(forecolor);transy.setLabel("Y");
final JTextField tae1 = new JTextField();
tae1.setBackground(backcolor);tae1.setBounds(1260,110,25,20);add(tae1);tae1.setForeground(forecolor);
//
JButton transz = new JButton();
transz.setBackground(backcolor);transz.setBounds(1285,110,45,20);add(transz);transz.setForeground(forecolor);transz.setLabel("Z");
final JTextField tae2 = new JTextField();
tae2.setBackground(backcolor);tae2.setBounds(1330,110,25,20);add(tae2);tae2.setForeground(forecolor);
JButton po = new JButton("Position aktualisieren");
add(po); po.setBounds(1000,130,200,20); po.setForeground(forecolor); po.setBackground(backcolor);
//
///////////////////////////////////////////
BranchGroup scene = createSceneGraph();
setLayout(new BorderLayout());
GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
Canvas3D canvas = new Canvas3D(config);
add(canvas);
canvas.setBounds(0,90,1000,780);
SimpleUniverse universe = new SimpleUniverse(canvas);
universe.addBranchGraph(scene);
Point3d p = new Point3d();
BoundingSphere bounds = new BoundingSphere(p,10);
OrbitBehavior orbit = new OrbitBehavior(canvas,
OrbitBehavior.REVERSE_ALL|OrbitBehavior.STOP_ZOOM);
orbit.setSchedulingBounds(bounds);
ViewingPlatform viewingPlatform = universe.getViewingPlatform();
// Damit wird die ViewingPlatform etwas zurückgesetzt,
// so dass man die Objekte in der Szene sehen kann.
viewingPlatform.setNominalViewingTransform();
viewingPlatform.setViewPlatformBehavior(orbit);
///////////////////////////////////////////
}
//////////////////////////////////////////////////////////////////////////////////////
void createStarBackground(BranchGroup bg)
{
java.util.Random rand = new java.util.Random();
float mag;
BranchGroup BGBranch=new BranchGroup();
Background BG=new Background();
PointArray starfield = new PointArray(15000, PointArray.COORDINATES|PointArray.COLOR_3);
float[] point = new float[3];
float[] brightness = new float[3];
for (int i = 0; i < 15000; i++)
{
point[0] = (rand.nextInt(2) == 0) ? rand.nextFloat() * -1.0f :rand.nextFloat();
point[1] = (rand.nextInt(2) == 0) ? rand.nextFloat() * -1.0f :rand.nextFloat();
point[2] = (rand.nextInt(2) == 0) ? rand.nextFloat() * -1.0f :rand.nextFloat();
starfield.setCoordinate(i, point);
mag=(rand.nextFloat()+0.5f)/1.5f;
brightness[0]=mag;
brightness[1]=mag;
brightness[2]=mag;
starfield.setColor(i, brightness);
}
Shape3D StarShape=new Shape3D(starfield);
StarShape.setAppearance(new Appearance());
StarShape.getAppearance().setPointAttributes(new PointAttributes(1f,true));
BGBranch.addChild(StarShape);
BG.setGeometry(BGBranch);
BG.setApplicationBounds(new BoundingSphere(new Point3d(),10.0));
BG.setColor(new Color3f(0,0,0));
bg.addChild(BG);
}
public BranchGroup createSceneGraph()
{
BranchGroup Root = new BranchGroup();
createStarBackground(Root);
//Head
head = new Transform3D();
head.setTranslation(new Vector3f(hx,hy,hz));
Head = new TransformGroup();
Root.addChild(Head);Head.setTransform(head);
rh1 = new Transform3D(); rh1.rotX(Math.toRadians(rhx));
Rh1 = new TransformGroup(); Head.addChild(Rh1);Rh1.setTransform(rh1);
rh2 = new Transform3D(); rh2.rotY(Math.toRadians(rhy));
Rh2 = new TransformGroup(); Rh1.addChild(Rh2);Rh2.setTransform(rh2);
rh3 = new Transform3D(); rh3.rotZ(Math.toRadians(rhz));
Rh3 = new TransformGroup();Rh3.addChild(new Rayman_Head(headsize).getChild()); Rh3.setCapability(TransformGroup.ALLOW_CHILDREN_WRITE|TransformGroup.ALLOW_TRANSFORM_READ|TransformGroup.ALLOW_LOCALE_READ|TransformGroup.ALLOW_LOCAL_TO_VWORLD_READ|TransformGroup.ALLOW_COLLISION_BOUNDS_WRITE|TransformGroup.ALLOW_COLLIDABLE_READ|TransformGroup.ALLOW_BOUNDS_WRITE|TransformGroup.ALLOW_BOUNDS_READ|TransformGroup.ALLOW_AUTO_COMPUTE_BOUNDS_WRITE|TransformGroup.ALLOW_AUTO_COMPUTE_BOUNDS_READ|TransformGroup.ALLOW_TRANSFORM_WRITE|TransformGroup.ALLOW_CHILDREN_READ|TransformGroup.ALLOW_CHILDREN_EXTEND);Rh2.addChild(Rh3);Rh3.setTransform(rh3);
//Light Definitions
Point3d p = new Point3d();
BoundingSphere bounds = new BoundingSphere(p, 100);
Color3f lightColor = new Color3f(.3f,.3f,.3f);
AmbientLight ambientLight= new AmbientLight(lightColor);
ambientLight.setInfluencingBounds(bounds);
Root.addChild(ambientLight);
DirectionalLight directionalLight = new DirectionalLight();
directionalLight.setColor(lightColor);
directionalLight.setInfluencingBounds(bounds);
Root.addChild(directionalLight);
return Root;
}
public static void main(String[]args){new Rayman_Maker();}
public static void Uhr(long millis){try{Thread.sleep(millis);}catch(InterruptedException e){}}
}
[\code]