so:
hier der Quelltext:
so
ob das jetz sehr effektiv ist etc. kümmere ich mich erstmal nicht.
ich möchte nur das der mir das auf klick trnslatiert und rotiert...weiss aber nicht warum das nicht funktioniert
wär nett wenn ihr mir helfen könntet
hier der Quelltext:
Code:
import javax.vecmath.*;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.universe.*;
import javax.media.j3d.*;
import com.sun.j3d.utils.behaviors.vp.*;
import javax.swing.JFrame;
import java.awt.*;
import java.awt.event.*;
public class Transformat extends JFrame implements ActionListener
{
public Canvas3D myCanvas3D;
// Anfang Variablen
private MenuBar jmb = new MenuBar();
private Menu Korp = new Menu("Körper");
MenuItem Con = new MenuItem("Kegel");
MenuItem Wurf = new MenuItem("Würfel");
private Menu Tran = new Menu("Transformieren");
MenuItem Rotate = new MenuItem("Rotieren");
MenuItem Trans = new MenuItem("Translation");
MenuItem Skale = new MenuItem("Skalierung");
MenuItem Scher = new MenuItem("Scherung");
private Menu Datei = new Menu("Datei");
MenuItem Ende = new MenuItem("Ende");
MenuItem clear = new MenuItem("Löschen");
Appearance blau = new Appearance();
BranchGroup scene = new BranchGroup();
Appearance rot = new Appearance ();
BranchGroup conGroup = new BranchGroup();
BranchGroup boxGroup = new BranchGroup();
Transform3D ROTA = new Transform3D();
Transform3D TRANS = new Transform3D();
TransformGroup rota = new TransformGroup(ROTA);
TransformGroup trans = new TransformGroup(TRANS);
// Ende Variablen
public Transformat()
{
setMenuBar(jmb);
jmb.add(Tran);
Tran.add(Rotate);
Rotate.addActionListener(this);
Tran.add(Trans);
Trans.addActionListener(this);
Tran.add(Skale);
Skale.addActionListener(this);
Tran.add(Scher);
Scher.addActionListener(this);
jmb.add(Korp);
Korp.add(Con);
Korp.add(Wurf);
Con.addActionListener (this);
Wurf.addActionListener (this);
jmb.add(Datei);
Datei.add(Ende);
Datei.add(clear);
Ende.addActionListener (this);
clear.addActionListener (this);
//Standardeinstellung fuer das Betrachteruniversum
myCanvas3D = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
//Aufbau des SimpleUniverse:
//Zuerst Erzeugen zusammen mit dem Canvas
SimpleUniverse simpUniv = new SimpleUniverse(myCanvas3D);
//Standardpositionierung des Betrachters
simpUniv.getViewingPlatform().setNominalViewingTransform();
//Die Szene wird in dieser Methode erzeugt.
createSceneGraph(simpUniv);
//Hinzufuegen von Licht
addLight(simpUniv);
//Hierdurch kann man mit der Maus den Betrachterstandpunkt veraendern
OrbitBehavior ob = new OrbitBehavior(myCanvas3D);
ob.setSchedulingBounds(new BoundingSphere(new Point3d(0.0,0.0,0.0),Double.MAX_VALUE));
simpUniv.getViewingPlatform().setViewPlatformBehavior(ob);
//Darstellung des Canvas/Fensters:
setTitle("Transformationen");
setSize(1000,800);
getContentPane().add("Center", myCanvas3D);
setVisible(true);
}
public static void main(String[] args)
{
Transformat staticScene = new Transformat();
}
//In dieser Methode werden die Objekte der Szene aufgebaut und dem
//SimpleUniverse su hinzugefuegt.
public void createSceneGraph(SimpleUniverse su)
{
setToMyDefaultAppearance(blau,new Color3f(0.0f,0.0f,0.8f),new Color3f(0.0f,0.0f,0.5f));
setToMyDefaultAppearance(rot,new Color3f(0.8f,0.0f,0.0f),new Color3f(0.5f,0.0f,0.0f));
//float Kante=0.2f;
//Cone Cone = new Cone(0.1f,0.8f,myApp);
//Box Wuerfel = new Box(Kante,Kante,Kante,MyApp);
//*** Die Wurzel des Graphen, der die Szene enthaelt. ***
//Die folgenden drei Zeilen erzeugen einen weißen Hintergrund.
Background bg = new Background(new Color3f(1.0f,1.0f,1.0f));
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0),Double.MAX_VALUE);
bg.setApplicationBounds(bounds);
scene.addChild(bg);
scene.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
scene.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE);
scene.setCapability(BranchGroup.ALLOW_CHILDREN_READ);
scene.setCapability(BranchGroup.ALLOW_DETACH);
boxGroup.setCapability(BranchGroup.ALLOW_DETACH);
conGroup.setCapability(BranchGroup.ALLOW_DETACH);
scene.addChild(rota);
scene.addChild(trans);
scene.compile();
su.addBranchGraph(scene);
}
public static void setToMyDefaultAppearance(Appearance blau, Color3f col, Color3f col2)
{
blau.setMaterial(new Material(col,col2,col,col,100.0f));
}
// public static void setToMyDefaultAppearance(Appearance rot, Color3f col, Color3f col2)
{
}
public void addLight(SimpleUniverse su)
{
BranchGroup bgLight = new BranchGroup();
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0), Double.MAX_VALUE);
Color3f lightColour1 = new Color3f(1.0f,1.0f,1.0f);
Vector3f lightDir1 = new Vector3f(-1.0f,0.0f,-0.5f);
DirectionalLight light1 = new DirectionalLight(lightColour1, lightDir1);
light1.setInfluencingBounds(bounds);
Vector3f lightDir2 = new Vector3f(0.5f,0.0f,1.0f);
DirectionalLight light2 = new DirectionalLight(lightColour1, lightDir2);
light2.setInfluencingBounds(bounds);
bgLight.addChild(light1);
bgLight.addChild(light2);
su.addBranchGraph(bgLight);
}
public void actionPerformed (ActionEvent e)
{ String Klick = e.getActionCommand();
if (Klick == "Kegel")
{
conGroup.addChild(new Cone(0.1f,0.8f,blau));
scene.addChild(conGroup);
}
if (Klick == "Würfel")
{
float Kante = 0.2f;
boxGroup.addChild(new Box(Kante,Kante,Kante,rot));
scene.addChild(boxGroup);
}
if (Klick == "Rotieren")
{
scene.removeChild(boxGroup);
scene.removeChild(conGroup);
trans.removeChild(conGroup);
trans.removeChild(boxGroup);
rota.addChild(conGroup);
rota.addChild(boxGroup);
ROTA.rotZ(Math.PI/6);
scene.addChild(rota);
}
if (Klick =="Translation")
{
scene.removeChild(boxGroup);
scene.removeChild(conGroup);
rota.removeChild(conGroup);
rota.removeChild(boxGroup);
trans.addChild(boxGroup);
trans.addChild(conGroup);
TRANS.setTranslation(new Vector3f(10f,10f,10f));
scene.addChild(trans);
}
if (Klick == "Ende")
{
System.exit(0);
}
}
}
ob das jetz sehr effektiv ist etc. kümmere ich mich erstmal nicht.
ich möchte nur das der mir das auf klick trnslatiert und rotiert...weiss aber nicht warum das nicht funktioniert
wär nett wenn ihr mir helfen könntet