Hi Leute,
ich bin gerade dabei mich in Java3D einzuarbeiten. ich will ein sehr einfaches Grafikprogramm schreiben, bei dem man mit der Maus Objekte (Quadrate, Kugeln usw.) in die Welt setzen kann. Doch genau hier liegt schon mein Problem und zwar die Umrechnung von 2D Koordinaten in 3D Koordinaten. Außerdem bin ich mir nicht sicher ob das richtig ist, für jedes neue Objekt eine neue BranchGroup zu erstellen, denn in mehreren utorials kam es so rüber, als sollte es immer nur eine BranchGroup geben, die für alle anderen die Wurzel darstellt.
Hier ist mal der Code von dem, was ich schon hab:
danke, euer stevey
ich bin gerade dabei mich in Java3D einzuarbeiten. ich will ein sehr einfaches Grafikprogramm schreiben, bei dem man mit der Maus Objekte (Quadrate, Kugeln usw.) in die Welt setzen kann. Doch genau hier liegt schon mein Problem und zwar die Umrechnung von 2D Koordinaten in 3D Koordinaten. Außerdem bin ich mir nicht sicher ob das richtig ist, für jedes neue Objekt eine neue BranchGroup zu erstellen, denn in mehreren utorials kam es so rüber, als sollte es immer nur eine BranchGroup geben, die für alle anderen die Wurzel darstellt.
Hier ist mal der Code von dem, was ich schon hab:
Java:
package graphics3D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.universe.SimpleUniverse;
import javax.media.j3d.*;
import javax.vecmath.*;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GraphicsConfiguration;
import java.awt.Label;
import javax.swing.JFrame;
import javax.swing.JPanel;
@SuppressWarnings("restriction")
public class MyPanel extends JPanel implements MouseListener{
final int WIDTH = 600, HEIGHT = 800;
SimpleUniverse universe;
BranchGroup bGroup;
Canvas3D canvas;
GraphicsConfiguration config;
public MyPanel() {
JFrame frame = new JFrame();
frame.setPreferredSize(new Dimension(WIDTH, HEIGHT));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setVisible(true);
frame.pack();
frame.add(this);
addMouseListener(this);
setLayout(new BorderLayout());
bGroup = new BranchGroup();
config = SimpleUniverse.getPreferredConfiguration();
canvas = new Canvas3D(config);
canvas.addMouseListener(this);
add(canvas, BorderLayout.CENTER);
Color3f light1Color = new Color3f(1, 1, 10);
BoundingSphere bounds = new BoundingSphere(new Point3d(0,0,0), 100);
Vector3f light1Direction = new Vector3f(10.0f, 10.0f, -15.0f);
DirectionalLight light1 = new DirectionalLight(light1Color, light1Direction);
light1.setInfluencingBounds(bounds);
bGroup.addChild(light1);
Color3f ambientColor = new Color3f(1.0f, 1.0f, 1.0f);
AmbientLight ambientLightNode = new AmbientLight(ambientColor);
ambientLightNode.setInfluencingBounds(bounds);
bGroup.addChild(ambientLightNode);
universe = new SimpleUniverse(canvas);
universe.getViewingPlatform().setNominalViewingTransform();
universe.addBranchGraph(bGroup);
}
public static void main(String args[]) {
new MyPanel();
}
@Override
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent e) {
TransformGroup transGroup = new TransformGroup();
Transform3D trans = new Transform3D();
Sphere sphere = new Sphere(0.05f);
if(e.getX() < WIDTH/2 && e.getY() < HEIGHT/2) {
trans.setTranslation(new Vector3f(-((1f/WIDTH)*(WIDTH-e.getX())), ((1f/HEIGHT)*(HEIGHT-e.getY())), 0.0f));
}
if(e.getX() > WIDTH/2 && e.getY() < HEIGHT/2) {
trans.setTranslation(new Vector3f(((1f/WIDTH)*(e.getX()-WIDTH/2)), ((1f/HEIGHT)*(HEIGHT-e.getY())), 0.0f));
}
if(e.getX() > WIDTH/2 && e.getY() > HEIGHT/2) {
trans.setTranslation(new Vector3f(((1f/WIDTH)*(e.getX()-WIDTH/2)), -((1f/HEIGHT)*(e.getY()-HEIGHT/2)), 0.0f));
}
if(e.getX() < WIDTH/2 && e.getY() > HEIGHT/2) {
trans.setTranslation(new Vector3f(-((1f/WIDTH)*(WIDTH-e.getX())), -((1f/HEIGHT)*(e.getY()-HEIGHT/2)), 0.0f));
}
transGroup.setTransform(trans);
transGroup.addChild(sphere);
BranchGroup g = new BranchGroup();
g.addChild(transGroup);
universe.addBranchGraph(g);
revalidate();
}
}
danke, euer stevey