Hallo,
ich muß mich im Rahmen einer Projektarbeit mit Java 3D beschäftigen und, da ich blutiger Java-Anfänger bin stehe ich voll auf dem Schlauch.
Ich muß in einer Umgebung mehr oder weniger komplizierte Objekte darstellen. Diese wollte ich nach Möglichkeit auf ihre Grundkörper zurückführen, um der Vektorgrafik aus dem Weg zu gehen. der 2. Grund ist, diese Objekte müssen durch Ereignisse Teilanimiert werden.
Nun zu meinen Problemen:
Wie kann ich Objekte wie Cube, Box, ... frei in dem Universum platzieren????
Wie kann ich einem Objekt eine Bewegung (horizontale rechts-links-Bewegung) aufzwingen????
Wie kann ich einen Button einfügen, wenn ich gleichzeitig die Funktion Box im Applet verwende???
Die Klassen der Beiden Objekte "beisen" sich....
Wie kann ich diese Bewegung durch einen Mouseclick auf einen Button starten????
Ich bin mir im Klaren darüber, daß dies wirklich viele Fragen sind. Vielleicht könnte ich sie nach langem, langem rätzeln auch selbst lösen, doch ich habe einfach nicht mehr die Nerven dazu... :-(
Anbei schreibe ich mal meinen Quelltext. Vielleicht sind dort ja noch Fehler enthalten, die weitere Probleme nach sich ziehen....
Ich danke euch schon mal recht herzlich im Voraus.
Draco
package festo.distribution;
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.awt.event.WindowAdapter;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.behaviors.mouse.*;
import javax.media.j3d.*;
import javax.vecmath.*;
public class magazin extends Applet {
float angle = 0.0f;
Transform3D trans = new Transform3D();
private SimpleUniverse u = null;
//Inhaltszweig
public BranchGroup createSceneGraph() {
// Kreieren der root des branch graph (Teilbaumgraph)
BranchGroup objRoot = new BranchGroup();
BoundingSphere bounds =
new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
// Kreieren einer Transformgroup, um alle Objekte
// in ihrer Größe der Scene anzupassen
TransformGroup objScale = new TransformGroup();
Transform3D t3d = new Transform3D();
t3d.setScale(0.2);
objScale.setTransform(t3d);
objRoot.addChild(objScale);
// Diese TranformGroup wird vom Mousmanipulator benutzt
TransformGroup objTrans = new TransformGroup();
objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); //Falls gesetzt, dann ist das Verändern der Subknoten erlaubt (Schreibzugriff).
objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); //Falls gesetzt, dann ist das Auslesen der Subknoten erlaubt (Lesezugriff).
objTrans.setCapability(TransformGroup.ALLOW_CHILDREN_EXTEND); //Falls gesetzt, dann ist das Hinzufügen von neuen Subknoten zu diesem Group-Objekt erlaubt.
objScale.addChild(objTrans);
// Diese TransformGroup dient zur Animation der Box
TransformGroup objAni = new TransformGroup();
objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); //Falls gesetzt, dann ist das Verändern der Subknoten erlaubt (Schreibzugriff).
objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); //Falls gesetzt, dann ist das Auslesen der Subknoten erlaubt (Lesezugriff).
objTrans.setCapability(TransformGroup.ALLOW_CHILDREN_EXTEND); //Falls gesetzt, dann ist das Hinzufügen von neuen Subknoten zu diesem Group-Objekt erlaubt.
objTrans.addChild(objAni);
// Kreieren des Zylinder
PolygonAttributes attr = new PolygonAttributes();
attr.setCullFace(PolygonAttributes.CULL_NONE);
Appearance ap = new Appearance();
Material mat = new Material();
mat.setLightingEnable(true);
ap.setMaterial(mat);
ap.setPolygonAttributes(attr);
// Anlegen der Objekte
Cylinder CylinderObj = new Cylinder(1.0f, 3.0f, ap);
Box BoxObj = new Box(1,1,3,ap);
ColorCube ColorCube = new ColorCube();
// Einfügen der Objekte in Graph
objTrans.addChild(CylinderObj);
objAni.addChild(BoxObj);
// Mouse-Rotationsverhalten kreieren ..... Wird durch das Gedrückthalten der linken Maustaste aktiviert
MouseRotate behavior = new MouseRotate(objTrans);
objTrans.addChild(behavior);
behavior.setSchedulingBounds(bounds);
// Mouse-Zoomverhalten kreieren ..... Wird durch das Gedrückthalten der mittleren Maustaste aktiviert
MouseZoom behavior2 = new MouseZoom(objTrans);
objTrans.addChild(behavior2);
behavior2.setSchedulingBounds(bounds);
// Mouse-Translationsverhalten kreieren ..... Wird durch das Gedrückthalten der rechten Maustaste aktiviert
MouseTranslate behavior3 = new MouseTranslate(objTrans);
objTrans.addChild(behavior3);
behavior3.setSchedulingBounds(bounds);
// Lichteffekte der Scene (2 unterschiedliche Lichtfarben)
Color3f lColor1 = new Color3f(0.5f, 0.0f, 0.5f);
Color3f lColor2 = new Color3f(0.7f, 0.7f, 0.0f);
Vector3f lDir1 = new Vector3f(-1.0f, -1.0f, 1.0f);
Vector3f lDir2 = new Vector3f(0.0f, 0.0f, -1.0f);
DirectionalLight lgt1 = new DirectionalLight(lColor1, lDir1);
DirectionalLight lgt2 = new DirectionalLight(lColor2, lDir2);
lgt1.setInfluencingBounds(bounds);
lgt2.setInfluencingBounds(bounds);
objScale.addChild(lgt1);
objScale.addChild(lgt2);
// Hintergrund mit Farbe definieren
Color3f bgColor = new Color3f(0.05f, 0.05f, 0.5f); //blau
Background bgNode = new Background(bgColor);
bgNode.setApplicationBounds(bounds);
objRoot.addChild(bgNode);
// Optimiert den gesamten Inhaltszweig
objRoot.compile();
return objRoot;
}
public magazin() {
}
public void init() {
setLayout(new BorderLayout());
GraphicsConfiguration config =
SimpleUniverse.getPreferredConfiguration();
Canvas3D c = new Canvas3D(config);
add("Center", c);
//JPanel p = new JPanel();
//p.add(rotateB);
//add("North", p);
// Kreieren einer einfachen Scene und Anbindung
// an das virtuelle Universum
BranchGroup scene = createSceneGraph();
u = new SimpleUniverse(c);
// Dies setzt die ViewPlatform ein Stück zurück,
// um alle Objekte der Scene betrachten zu können
u.getViewingPlatform().setNominalViewingTransform();
u.addBranchGraph(scene);
}
public void destroy() {
u.cleanup();
}
// Das Folgende erlaub das Prog als eine Applikation
// bzw. ein Applet laufen zu lassen
public static void main(String[] args) {
//Framegröße
new MainFrame(new magazin(), 256, 256);
}
}
ich muß mich im Rahmen einer Projektarbeit mit Java 3D beschäftigen und, da ich blutiger Java-Anfänger bin stehe ich voll auf dem Schlauch.
Ich muß in einer Umgebung mehr oder weniger komplizierte Objekte darstellen. Diese wollte ich nach Möglichkeit auf ihre Grundkörper zurückführen, um der Vektorgrafik aus dem Weg zu gehen. der 2. Grund ist, diese Objekte müssen durch Ereignisse Teilanimiert werden.
Nun zu meinen Problemen:
Wie kann ich Objekte wie Cube, Box, ... frei in dem Universum platzieren????
Wie kann ich einem Objekt eine Bewegung (horizontale rechts-links-Bewegung) aufzwingen????
Wie kann ich einen Button einfügen, wenn ich gleichzeitig die Funktion Box im Applet verwende???
Die Klassen der Beiden Objekte "beisen" sich....
Wie kann ich diese Bewegung durch einen Mouseclick auf einen Button starten????
Ich bin mir im Klaren darüber, daß dies wirklich viele Fragen sind. Vielleicht könnte ich sie nach langem, langem rätzeln auch selbst lösen, doch ich habe einfach nicht mehr die Nerven dazu... :-(
Anbei schreibe ich mal meinen Quelltext. Vielleicht sind dort ja noch Fehler enthalten, die weitere Probleme nach sich ziehen....
Ich danke euch schon mal recht herzlich im Voraus.
Draco
package festo.distribution;
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.awt.event.WindowAdapter;
import com.sun.j3d.utils.applet.MainFrame;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.behaviors.mouse.*;
import javax.media.j3d.*;
import javax.vecmath.*;
public class magazin extends Applet {
float angle = 0.0f;
Transform3D trans = new Transform3D();
private SimpleUniverse u = null;
//Inhaltszweig
public BranchGroup createSceneGraph() {
// Kreieren der root des branch graph (Teilbaumgraph)
BranchGroup objRoot = new BranchGroup();
BoundingSphere bounds =
new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
// Kreieren einer Transformgroup, um alle Objekte
// in ihrer Größe der Scene anzupassen
TransformGroup objScale = new TransformGroup();
Transform3D t3d = new Transform3D();
t3d.setScale(0.2);
objScale.setTransform(t3d);
objRoot.addChild(objScale);
// Diese TranformGroup wird vom Mousmanipulator benutzt
TransformGroup objTrans = new TransformGroup();
objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); //Falls gesetzt, dann ist das Verändern der Subknoten erlaubt (Schreibzugriff).
objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); //Falls gesetzt, dann ist das Auslesen der Subknoten erlaubt (Lesezugriff).
objTrans.setCapability(TransformGroup.ALLOW_CHILDREN_EXTEND); //Falls gesetzt, dann ist das Hinzufügen von neuen Subknoten zu diesem Group-Objekt erlaubt.
objScale.addChild(objTrans);
// Diese TransformGroup dient zur Animation der Box
TransformGroup objAni = new TransformGroup();
objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); //Falls gesetzt, dann ist das Verändern der Subknoten erlaubt (Schreibzugriff).
objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); //Falls gesetzt, dann ist das Auslesen der Subknoten erlaubt (Lesezugriff).
objTrans.setCapability(TransformGroup.ALLOW_CHILDREN_EXTEND); //Falls gesetzt, dann ist das Hinzufügen von neuen Subknoten zu diesem Group-Objekt erlaubt.
objTrans.addChild(objAni);
// Kreieren des Zylinder
PolygonAttributes attr = new PolygonAttributes();
attr.setCullFace(PolygonAttributes.CULL_NONE);
Appearance ap = new Appearance();
Material mat = new Material();
mat.setLightingEnable(true);
ap.setMaterial(mat);
ap.setPolygonAttributes(attr);
// Anlegen der Objekte
Cylinder CylinderObj = new Cylinder(1.0f, 3.0f, ap);
Box BoxObj = new Box(1,1,3,ap);
ColorCube ColorCube = new ColorCube();
// Einfügen der Objekte in Graph
objTrans.addChild(CylinderObj);
objAni.addChild(BoxObj);
// Mouse-Rotationsverhalten kreieren ..... Wird durch das Gedrückthalten der linken Maustaste aktiviert
MouseRotate behavior = new MouseRotate(objTrans);
objTrans.addChild(behavior);
behavior.setSchedulingBounds(bounds);
// Mouse-Zoomverhalten kreieren ..... Wird durch das Gedrückthalten der mittleren Maustaste aktiviert
MouseZoom behavior2 = new MouseZoom(objTrans);
objTrans.addChild(behavior2);
behavior2.setSchedulingBounds(bounds);
// Mouse-Translationsverhalten kreieren ..... Wird durch das Gedrückthalten der rechten Maustaste aktiviert
MouseTranslate behavior3 = new MouseTranslate(objTrans);
objTrans.addChild(behavior3);
behavior3.setSchedulingBounds(bounds);
// Lichteffekte der Scene (2 unterschiedliche Lichtfarben)
Color3f lColor1 = new Color3f(0.5f, 0.0f, 0.5f);
Color3f lColor2 = new Color3f(0.7f, 0.7f, 0.0f);
Vector3f lDir1 = new Vector3f(-1.0f, -1.0f, 1.0f);
Vector3f lDir2 = new Vector3f(0.0f, 0.0f, -1.0f);
DirectionalLight lgt1 = new DirectionalLight(lColor1, lDir1);
DirectionalLight lgt2 = new DirectionalLight(lColor2, lDir2);
lgt1.setInfluencingBounds(bounds);
lgt2.setInfluencingBounds(bounds);
objScale.addChild(lgt1);
objScale.addChild(lgt2);
// Hintergrund mit Farbe definieren
Color3f bgColor = new Color3f(0.05f, 0.05f, 0.5f); //blau
Background bgNode = new Background(bgColor);
bgNode.setApplicationBounds(bounds);
objRoot.addChild(bgNode);
// Optimiert den gesamten Inhaltszweig
objRoot.compile();
return objRoot;
}
public magazin() {
}
public void init() {
setLayout(new BorderLayout());
GraphicsConfiguration config =
SimpleUniverse.getPreferredConfiguration();
Canvas3D c = new Canvas3D(config);
add("Center", c);
//JPanel p = new JPanel();
//p.add(rotateB);
//add("North", p);
// Kreieren einer einfachen Scene und Anbindung
// an das virtuelle Universum
BranchGroup scene = createSceneGraph();
u = new SimpleUniverse(c);
// Dies setzt die ViewPlatform ein Stück zurück,
// um alle Objekte der Scene betrachten zu können
u.getViewingPlatform().setNominalViewingTransform();
u.addBranchGraph(scene);
}
public void destroy() {
u.cleanup();
}
// Das Folgende erlaub das Prog als eine Applikation
// bzw. ein Applet laufen zu lassen
public static void main(String[] args) {
//Framegröße
new MainFrame(new magazin(), 256, 256);
}
}