Würfel vergrößern und verkleinern per Button

Status
Nicht offen für weitere Antworten.
K

KimWangLee

Gast
Hier erst mal der Code

Code:
import java.awt.GraphicsConfiguration;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.media.j3d.BoundingSphere;
import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.Geometry;
import javax.media.j3d.Group;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.vecmath.Vector3d;
import com.sun.j3d.utils.behaviors.mouse.MouseRotate;
import com.sun.j3d.utils.behaviors.picking.PickZoomBehavior;
import com.sun.j3d.utils.geometry.ColorCube;
import com.sun.j3d.utils.universe.SimpleUniverse;


public class MyUniverse implements ActionListener{
	
	private JFrame f = new JFrame();
	private JPanel p = new JPanel();
	JButton b = new JButton("Erzeugen");
	JButton bu = new JButton("Löschen");
	//JButton but = new JButton("Dialogfeld");
	JButton butt = new JButton("Vergrößern");
	JButton butto = new JButton("Verkleinern");
	JButton button = new JButton("Auslesen");
	JTextField t = new JTextField();
	private Canvas3D canvas;
	private SimpleUniverse universe = null;
	private BranchGroup Root = new BranchGroup();
	

	public MyUniverse(){
		f.setSize(630, 500);
		f.setLocation(100, 100);
		f.setTitle("Geometrische Körper Berechner");
		f.setLayout(null);
		
		GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
		canvas = new Canvas3D( config );
		canvas.setBounds(130, 0, 500, 500);
		universe = new SimpleUniverse( canvas );
		universe.getViewingPlatform().setNominalViewingTransform();
		
		b.setBounds(10, 10, 100, 40);
		b.addActionListener(this);
		bu.setBounds(10, 60, 100, 40);
		bu.addActionListener(this);
		//but.setBounds(10, 110, 80, 40);
		//but.addActionListener(this);
		butt.setBounds(10, 160, 100, 40);
		butt.addActionListener(this);
		butto.setBounds(10, 210, 100, 40);
		butto.addActionListener(this);
		button.setBounds(10, 260, 100, 40);
		button.addActionListener(this);
		t.setBounds(10, 310, 100, 30);
		
		p.setLayout(null);
		p.setBounds(0,0,130,500);
		p.add(b);
		p.add(bu);
		//p.add(but);
		p.add(butt);
		p.add(butto);
		p.add(button);
		p.add(t);
		f.add(p);
		f.add(canvas);
		
		f.setVisible(true);
	}
	
	public BranchGroup Würfel(String SeiteA){
		BranchGroup Eltern = new BranchGroup();
		TransformGroup tg = new TransformGroup();
		BoundingSphere behaveBounds = new BoundingSphere();
		
		tg.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
		tg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
		tg.setCapability(TransformGroup.ENABLE_PICK_REPORTING);
		tg.setCapability(BranchGroup.ALLOW_DETACH);
		
		PickZoomBehavior pickZoom = new PickZoomBehavior(Eltern, canvas, behaveBounds);
		
		
		MouseRotate rotor = new MouseRotate();
		rotor.setSchedulingBounds(new BoundingSphere());
		rotor.setTransformGroup(tg);
		
		ColorCube box = new ColorCube(Float.valueOf(SeiteA));
		
		tg.addChild( box );
		Eltern.addChild( tg );
		Eltern.addChild( rotor );
		Eltern.addChild(pickZoom);
		
		return Eltern;
	}
	
	public Transform3D Skalieren(double scale){
		Transform3D t3d = new Transform3D();
		t3d.setScale(new Vector3d(scale,scale, scale));
		return t3d;
		}


	public void actionPerformed(ActionEvent e) {
		if(e.getSource()==b){
			Root = Würfel(t.getText());
			Root.setCapability(BranchGroup.ALLOW_CHILDREN_WRITE);
			Root.setCapability(BranchGroup.ALLOW_CHILDREN_READ);
			Root.setCapability(BranchGroup.ALLOW_CHILDREN_EXTEND);
			Root.setCapability(BranchGroup.ALLOW_DETACH);
	        
			universe.addBranchGraph(Root);
		}
		if(e.getSource()==bu){
			Root.detach();
		}
		if(e.getSource()==butt){
			//Würfel vergrößern
		}
		if(e.getSource()==butto){
			//Würfel verkleinern
		}
		if(e.getSource()==button){
			//Größe von SeiteA ausgeben, auch nach veränderte Größe
			
		}
	}
	public static void main(String[] args) {
		new MyUniverse(); 
	}
}

Wie man aus dem Code vielleicht erkennen kann funktioniert das Vergrößern bzw. Verkleinern noch das Auslesen nicht. Ich weiß das man mit Transform3D bzw setScale den Würfel skalieren kann, aber wie soll ich die Transform3D an die TransformGroup bringen? Und wie kann ich auf den Würfel zugreifen, wenn ich mit getScale die Größe auslesen will.

Danke im Vorraus
 

Marco13

Top Contributor
Code:
double currentScale 1.0f;
TransformGroup tg = null;
public BranchGroup Würfel(String SeiteA)
{
      BranchGroup Eltern = new BranchGroup();
      tg = new TransformGroup(); 
...

public Transform3D Skalieren(double scale)
{
    currentScale = scale;
    Transform3D t3d = new Transform3D(); 


In actionPerformed
    if(e.getSource()==butt)
    {
        tg.setTransform(Skalieren(currentScale + 0.1));
    }
so in etwa...

Variablennamen schreibt man klein, butt, butto und button sind bull, bullsh, bullshit-Namen.
 
K

kimwanglee

Gast
danke für den Tipp

das mit dem Auslesen funkt. und der Würfel wird skaliert, aber wenn ich ihn rotiere und dann wieder skalieren will geht der Würfel in Ausgangsposition zurück, das heißt die Vorderseite wird gezeigt

falls jemand weis wie ich das verhindern kann bitte melden
 

0x7F800000

Top Contributor
naja, wenn du sowas in dem actionListener stehen hast, wird ja die transformation auf die skalierung alleine zurückgesetzt.

Wenn du es gedreht und skaliert haben willst, musst du die beiden transformationen halt verknüpfen erst erst danach weitertransformieren...
 
K

kimwanglee

Gast
wie soll das mit der Verknüpfung funktionieren?????habe keinen blassen Schimmer wie das gehen soll.... :?
 

Marco13

Top Contributor
Eigentlich "nur" die zwei TransformGroups hintereinanderhängen. Dieses MouseRotate müßte ich mir normal ansehen... (ewig nichtsmehr mit J3D gemacht).... aber eigentlich müßt's sowas schon tun:
Code:
TransformGroup tg = new TransformGroup();
TransformGroup skalierung = new TransformGroup();

public BranchGroup Würfel(String SeiteA){
....
 skalierung.addChild(box)
 tg.addChild( skalierung ); 
}

// Analog zum letzten Codestück:
In actionPerformed
    if(e.getSource()==butt)
    {
        skalierung.setTransform(Skalieren(currentScale + 0.1)); // hier wurde 'tg' durch 'skalierung' ersetzt
    }
 
K

kimwanglee

Gast
hab alles gemacht wie ihr das gesagt habt und es funktioniert auch so wie ich es wollte

bedanke mich noch mal bei allen die mir geholfen haben

mfg kimwanglee
 
K

kimwanglee

Gast
sorry das ich den Beitrag nicht abgehackt hab, aber ich finde den Hacken nicht :oops:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Elyt Würfel mit Bildanzeige Spiele- und Multimedia-Programmierung 5
TulPe Würfel per Mausklick rotieren Spiele- und Multimedia-Programmierung 10
K Würfel zu schnell Spiele- und Multimedia-Programmierung 5
F LWJGL Dreidimensionaler Würfel Spiele- und Multimedia-Programmierung 15
C Würfel erstellen und als Raum nutzen Spiele- und Multimedia-Programmierung 6
CookieSoft 3D Würfel will sich nicht drehen! [LWJGL] Spiele- und Multimedia-Programmierung 2
A JOGL Würfel hat durchsichtige Seiten? Spiele- und Multimedia-Programmierung 13
M Java3D - Problem mit rotierendem Würfel Spiele- und Multimedia-Programmierung 2
J Würfel Augenzahl richtig anzeigen Spiele- und Multimedia-Programmierung 16
D Würfel und zufall Spiele- und Multimedia-Programmierung 4
E Java3D Würfel Panel Spiele- und Multimedia-Programmierung 2
K Seitenlänge aus einem Würfel lesen Spiele- und Multimedia-Programmierung 3
G Polygonfläche vom Würfel mit Bildern füllen Spiele- und Multimedia-Programmierung 5
K Wie malt man am geschicktesten einen Würfel? Spiele- und Multimedia-Programmierung 2
D 3D Würfel mit Jogl Spiele- und Multimedia-Programmierung 14
Elyt Spielfeld vergrößern Monopoly Spiele- und Multimedia-Programmierung 5
T Bibliothek zum Verkleinern von Bildern (alle Fomate) Spiele- und Multimedia-Programmierung 3

Ähnliche Java Themen

Neue Themen


Oben