Java3D Objekt skalieren per JSlider/JButton

eksel

Mitglied
Hallo Leute, wieder einmal bräuchte ich wertvolle Tipps und Denkanstöße zu meinem Poblem :oops:

Ich würde gerne mit Java3D ein Objekt mit einem Slider (oder wenn es leichter sein sollte mit Buttons) skalieren. Sprich es ist ein Fenster vorhanden, in welchem Rechts der 3D Bereich mit dem Objekt ist, und Links verschiedene Slider, die bei Betätigung bestimmte Teile des Objektes größer oder kleiner machen sollen. Ich weiß nicht so recht wie ich das Problem angehen soll. Habt ihr da einige Ideen?

Vielen Dank :toll:
 

Tiding

Aktives Mitglied
Nun, ich kenne mich jetzt nicht wirklich gut mit Java3D aus, aber da sollte es doch dann eigentlich auch eine Methode zum skallieren geben! ???:L
Ansonsten braucht es wohl eine Matrix, zum skallieren des Objektes.

Oder habe ich jetzt dein Problem nicht verstanden? :bloed:

Sprich, kennst du bereits eine Methode, die das gewünschte macht, oder brauchst du genau diese?

lg
 

eksel

Mitglied
Also Methoden gibt es schon, ich meine setScale tut ja im Prinzip was ich möchte, nur weiß ich nicht ob setScale die richtige Wahl ist. Ich möchte ja per Slider (oder evtl. durch einen Buttonklick) ein Objekt größer oder kleiner skalieren. Neben setScale gibt es ja aber auch noch den ScaleInterpolator, dessen Funktion ich noch nicht ganz durchdrungen habe, deswegen stellt sich mir die Frage, was ich ganz genau nutzen sollte... :bahnhof:
 

Tiding

Aktives Mitglied
Ob Button oder Slider, das Objekt wird ja folglich in jedem "tick" (hier meine ich Buttonklick, oder Sliderstatusveränderung) um einen bestimmten Faktor, der vorher angegeben werden muss, verkleinert oder vergrößert. Da jeder "tick" ja visuell angezeigt wird, könnte das schon Rechenaufwendig sein.

Soviel wie ich jetzt zum ScaleInterpolator gelesen habe, ist das wohl zur Animationssteuerung gedacht. Eigentlich ist eine Animation zu zeigen, meiner Meinung nach, dann eher nicht so sinnvoll, da du im Hintergrund ja trotzdem "setScale" benutzen musst, um deine Werte zu erhalten, die du ja sicher brauchst!

Wenn du das Objekt nur aus Spass größer oder kleiner werden lassen willst und damit nichts weiter anfangen willst, es also nur der visuellen Freuden dienen soll, sprich eine Animation sein soll, würde ich wohl die Animation nehmen :bahnhof: .


Sprich ich würde das wie folgt umsetzen:
Ein Buttonklick: Bestimmten Scale-Wert (z.B. =110%; könnte man ja auch durch den Benutzer verändern lassen können.) nehmen und das Objekt vergrößern.
Und fertig.
 
Zuletzt bearbeitet:

eksel

Mitglied
Erstmal danke für die Hilfestellung. Es ist richtig wie du sagtest, es soll lediglich größer und kleiner gemacht werden, ohne Weiteres. Ich habe jetzt auch ein wenig rumgebastelt und deinen Gedanken (den ich auch von Anfang an hatte) halbwegs umgesetzt, sprich mit setScale gearbeitet. Dennoch wirft der mir ne Exception, wenn ich das Programm ausführe und den Button("test") klicke.

Die Exception ist folgende

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

und bezieht sich auf Zeile 10
Code:
skaliereMerkmalPlus(universe);
und Zeile 41
Code:
oKopf.setScale(d);


Hier der relevante Codeausschnitt:

Java:
             double d = 1;

        weitere Datenfelder, Kontruktor,... hier ausgelassen

    public void kopf() {

	    JButton test = new JButton("test");
		test.addActionListener(new ActionListener() {
			 public void actionPerformed(ActionEvent e) { 
				 skaliereMerkmalPlus(universe);
			}
		});
                
                ...
        }

	public void erzeugeSzenenGraph(SimpleUniverse su) {

		ObjectFile kopf = new ObjectFile(ObjectFile.RESIZE);
		Scene scene = null;
		try {
			scene = kopf.load("KopfM.obj");
		} catch (Exception e) {
			e.printStackTrace();
		}

		szene = new BranchGroup();

		TransformGroup tgSzene = new TransformGroup();
		tgSzene.addChild(scene.getSceneGroup());

		alleObjekte = scene.getNamedObjects();

		szene.addChild(tgSzene);
		szene.compile();
		su.addBranchGraph(szene);
	}

	public void skaliereMerkmalPlus(SimpleUniverse su) {
		Transform3D oKopf = (Transform3D) alleObjekte.get("Cube");
		oKopf.setScale(d);

		if (d <= 5 && d >= 0) {
			oKopf.setScale(d + 1);
			d = oKopf.getScale();
		} else {
			d = 6;
		}

		TransformGroup tgScale = new TransformGroup(oKopf);
	}
 
Zuletzt bearbeitet:

Tiding

Aktives Mitglied
Sicher, dass du das SimpleUniverse "universe" irgendwo initialisiert und instanziiert hast?
 
Zuletzt bearbeitet:

eksel

Mitglied
Jap, ganz sicher. Das Programm wird ja ausgeführt und es erscheint alles wie es soll, erst beim ButtonKlick komt die Fehlermeldung und es tut sich nichts weiteres :bahnhof:
 

Tiding

Aktives Mitglied
Dann eine andere Frage: (Entweder bin ich blind, oder übersehe was!)

Wozu brauchst du das universe überhaupt in der Methode skaliereMerkmalPlus() ?

Es würde Sinn machen, wenn du es irgendwo gebrauchen würdest :eek:
 

eksel

Mitglied
Emm, vielleicht liege ich da auch falsch, aber ich dachte ich muss die Veränderung durch den ButtonKlick an das SimpleUniverse übergeben, da sonst nichts passieren würde.

P.S.: habe eben auch ohne universe versucht auszuführen, es kommt wieder dieselbe Exception ;(
 

Tiding

Aktives Mitglied
das machst du da aber nicht ???:L

und Zeile 41
Code:
oKopf.setScale(d);
ist mir gerade erst aufgefallen, dass da ja noch mehr steht :D :bloed: also: Sicher, dass oKopf != null?

starte mal den debugger von Eclipse, da kann man sowas wunderbar nachschauen :D
 

eksel

Mitglied
Irgendwie bin ich jetzt veriwrrt, sry :D Ich poste mal sicherheitshalber den kompletten Code, vielleicht wird dann einiges klarer...


Java:
......import ausgelassen.......

public class Modell {

	private JFrame fenster3;
	private Container contentPane3;
	private JPanel merkmale;
	private JLabel lAugen, lNase, lMund, lOhren;
	private JSlider sAugen, sNase, sMund, sOhren;

	private Canvas3D canvas;
	private SimpleUniverse universe;
	private BranchGroup szene, lichtBG;
	private Hashtable alleObjekte;

	double d = 1;

	public Modell() {
		modell();
	}

	public void modell() {

 		fenster3 = new JFrame("3D Modell");

 		contentPane3 = fenster3.getContentPane();
 		contentPane3.setLayout(new BorderLayout(0, 0));

 		canvas = new Canvas3D(SimpleUniverse.getPreferredConfiguration());
		contentPane3.add(BorderLayout.CENTER, canvas);

 		universe = new SimpleUniverse(canvas);
 		universe.getViewingPlatform().setNominalViewingTransform();

		erzeugeSzenenGraph(universe);
 		erzeugeLicht(universe);

 		OrbitBehavior ob = new OrbitBehavior(canvas);
		BoundingSphere bs = new BoundingSphere(new Point3d(0.0, 0.0, 0.0),
 		          Double.MAX_VALUE);
		ob.setTranslateEnable(false);
		ob.setSchedulingBounds(bs);
		ob.setRotFactors(1, 0);
		universe.getViewingPlatform().setViewPlatformBehavior(ob);

		merkmale = new JPanel();
 		merkmale.setLayout(new GridLayout(0, 1, 0, 0));
 		merkmale.setBackground(Color.LIGHT_GRAY);

		JButton testPlus = new JButton("testPlus");
		testPlus.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) { 
				skaliereMerkmalPlus();
			}
		});
		
		JButton testMinus = new JButton("testMinus");
		testMinus.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) { 
				skaliereMerkmalMinus(universe);
			}
		});
		
		merkmale.add(testPlus);
		merkmale.add(testMinus);
		
		
		// Hinzufügen des Panels zum westlichen Bereich des Fensters
		contentPane3.add(merkmale, BorderLayout.WEST);

		// Einstellungen des Fensters
		fenster3.setVisible(true);
		fenster3.setSize(1000, 700);
	}

	public void erzeugeSzenenGraph(SimpleUniverse su) {

		ObjectFile kopf = new ObjectFile(ObjectFile.RESIZE);
		Scene scene = null;
		try {
			scene = kopf.load("KopfM.obj");
		} catch (Exception e) {
			e.printStackTrace();
		}

		szene = new BranchGroup();

		TransformGroup tgSzene = new TransformGroup();
		tgSzene.addChild(scene.getSceneGroup());

		alleObjekte = scene.getNamedObjects();

		szene.addChild(tgSzene);
		szene.compile();
		su.addBranchGraph(szene);

	}
	
	
	public void skaliereMerkmalPlus() {
		Transform3D oKopf = (Transform3D) alleObjekte.get("Cube");
		oKopf.setScale(d);

		if (d <= 5 && d >= 1) {
			oKopf.setScale(d + 1);
			d = oKopf.getScale();
		} else {
			d = 5;
		}
	}
	
	public void skaliereMerkmalMinus(SimpleUniverse su) {
		Transform3D oKopf = (Transform3D) alleObjekte.get("Cube");
		oKopf.setScale(d);

		if (d <= 6 && d >= 1) {
			oKopf.setScale(d - 1);
			d = oKopf.getScale();
		} else {
			d = 1;
		}

		BranchGroup bgScale = new BranchGroup();
		TransformGroup tgScale = new TransformGroup(oKopf);
		bgScale.addChild(tgScale);
		su.addBranchGraph(bgScale);
	}
	

	public void erzeugeLicht(SimpleUniverse su) {
		BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0),
				Double.MAX_VALUE);

		Color3f farbe = new Color3f(0.55f, 0.55f, 0.55f);

		AmbientLight aL1 = new AmbientLight(farbe);
		aL1.setInfluencingBounds(bounds);

		Vector3f v1 = new Vector3f(-20.0f, 5.0f, 0.0f);
		DirectionalLight dL1 = new DirectionalLight(farbe, v1);
		dL1.setInfluencingBounds(bounds);

		lichtBG = new BranchGroup();
		lichtBG.addChild(aL1);
		lichtBG.addChild(dL1);

		su.addBranchGraph(lichtBG);
	}

	public static void main(String[] args) {
		new Modell();
	}
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Java3D: Primitives zu einem Objekt kombinieren Spiele- und Multimedia-Programmierung 7
W Java3D: Kanten die hinter einem Objekt liegen werden gezeigt Spiele- und Multimedia-Programmierung 2
N Java3d in Eclipse einbinden Spiele- und Multimedia-Programmierung 4
Neumi5694 Java3D Viewer Beschriftung Spiele- und Multimedia-Programmierung 1
C Java3D Transformieren von obj. Datein Spiele- und Multimedia-Programmierung 0
M Cylinder anhand eines Vektors ausrichten (Java3d) Spiele- und Multimedia-Programmierung 0
Ruvok Java3D Tutorial gesucht Spiele- und Multimedia-Programmierung 5
U Hilfe bei Implementierung eines PointSounds in Java3D Spiele- und Multimedia-Programmierung 1
R Java3d ViewingPlatform erst Verschieben und dann RotationsInterpolator Spiele- und Multimedia-Programmierung 0
D Java3D - Blickfeld Spiele- und Multimedia-Programmierung 1
P Java3D Box Dimensionen und Positionierung Spiele- und Multimedia-Programmierung 1
J Java3D - Textur laden geht nicht Spiele- und Multimedia-Programmierung 9
J Java3D - Farben vermischen sich Spiele- und Multimedia-Programmierung 7
T Java3D Rendering Problem Spiele- und Multimedia-Programmierung 7
S Java3D oder JMonkey? Spiele- und Multimedia-Programmierung 17
H Java3D - Textur aufs innere einer Sphere mappen Spiele- und Multimedia-Programmierung 9
C java 3d ohne Java3d Spiele- und Multimedia-Programmierung 28
Maxim6394 [Java3D] Probleme bei Kollision Spiele- und Multimedia-Programmierung 7
Maxim6394 [Java3D] lookAt Mausposition Spiele- und Multimedia-Programmierung 17
Maxim6394 [Java3D] Probleme mit KeyFrame Animationen Spiele- und Multimedia-Programmierung 9
K Java3D als Applet ohne Installation von Java3d Spiele- und Multimedia-Programmierung 6
D Java3D Installation: package javax.media.j3d not found Spiele- und Multimedia-Programmierung 5
C Java3D Texture Mapping Spiele- und Multimedia-Programmierung 2
W Java3D: Farbe von Objekten stimmt nicht mit übergebenem RGB-Wert überein Spiele- und Multimedia-Programmierung 9
M Eigene Renderengine ohne Java3D,etc. Spiele- und Multimedia-Programmierung 19
C Java3D Sound spielt nur einen Sound ab. Spiele- und Multimedia-Programmierung 8
A JAVA3D TransformGroup <--> Group Problem Spiele- und Multimedia-Programmierung 3
M [Java3D] Animation von mehreren Objekten Spiele- und Multimedia-Programmierung 7
W Java3D: Eckkoordinaten einer Box herausfinden Spiele- und Multimedia-Programmierung 18
T Java3D: Objekte platzieren und entfernen? Spiele- und Multimedia-Programmierung 7
T Java3D: Nur die Kanten des Würfels rendern? Spiele- und Multimedia-Programmierung 4
W Java3D setBounds(BoundingBox) Spiele- und Multimedia-Programmierung 6
T [gelöst] Java3D: Unerwünschte Rotation um die 3.Achse vermeiden? Spiele- und Multimedia-Programmierung 3
Bastie JAVA3D - WRL Transform Spiele- und Multimedia-Programmierung 9
G Eclipse Problem mit Java3d Spiele- und Multimedia-Programmierung 3
T Java3D - Lichtquelle einbauen Spiele- und Multimedia-Programmierung 7
jemandzehage java3d parallel und perspective view Spiele- und Multimedia-Programmierung 5
H Cinema 4D in Java3D importieren Spiele- und Multimedia-Programmierung 2
1 [Java3D] komplexes Projekt? Spiele- und Multimedia-Programmierung 10
P .obj-Datei in Java3D laden: ParsingErrorException Spiele- und Multimedia-Programmierung 7
C Java3D Lichtquelle beim Beobachter Spiele- und Multimedia-Programmierung 2
C Java3D Interaktion während Animation Spiele- und Multimedia-Programmierung 3
aze Java3D: Flächen teilen Spiele- und Multimedia-Programmierung 15
P Java3D Textur verzerrt Spiele- und Multimedia-Programmierung 3
aze Java3D: Gegenstände aufeinander zubewegen ohne Kollision Spiele- und Multimedia-Programmierung 4
D [JAVA3D] Es werden 2 Fenster erzeugt und auf dem falschen gezeichnet Spiele- und Multimedia-Programmierung 3
aze Java3D: leere Räume füllen Spiele- und Multimedia-Programmierung 2
aze Java3d:Helligkeit von Shape3D ändern Spiele- und Multimedia-Programmierung 2
S Einschätzung zu Java3D-Einstieg Spiele- und Multimedia-Programmierung 3
F Programm mit Java3D unter Linux laufen lassen Spiele- und Multimedia-Programmierung 3
I Vergleich von Java3D und OpenGL Spiele- und Multimedia-Programmierung 17
W Waterslide mit Java3D Spiele- und Multimedia-Programmierung 11
M Java3D Picking - falsche Objekte werden gepickt Spiele- und Multimedia-Programmierung 3
M [Java3D] Rotieren der Scene NICHT des POV Spiele- und Multimedia-Programmierung 4
F Jogl oder Java3D ? Spiele- und Multimedia-Programmierung 20
K Java3D Abfängerfrage Spiele- und Multimedia-Programmierung 3
aze Java3D:Farbige Flächen verschwinden lassen(Transparenz- oder Colorinterpolator?)) Spiele- und Multimedia-Programmierung 5
C Java3D PositionInterpolator Spiele- und Multimedia-Programmierung 3
G [Java3D] Probleme bei Animation Spiele- und Multimedia-Programmierung 4
E [JAVA3D] Kamerasteuerung Spiele- und Multimedia-Programmierung 3
E [JAVA3D] Schattenstrich durch die Szene Spiele- und Multimedia-Programmierung 4
M Grundsätzliche Java3D Fragen Spiele- und Multimedia-Programmierung 2
C Java3D SceneGraohPath Spiele- und Multimedia-Programmierung 2
C Java3D Rotation um einen Punkt (y-achse) Spiele- und Multimedia-Programmierung 2
G Java3D plattformunabhängig bundeln Spiele- und Multimedia-Programmierung 3
TheKing Java3D-Shooter View Spiele- und Multimedia-Programmierung 2
A Java3D tutorial? Spiele- und Multimedia-Programmierung 3
R Java3D Kollisionserkennung und Schwerkraft Spiele- und Multimedia-Programmierung 17
M Java3D Objekte entfernen und hinzufügen Spiele- und Multimedia-Programmierung 10
J Java3d Schnelle Geschosse Spiele- und Multimedia-Programmierung 12
D Kann ich mit Java3D 2D Daten als 3D surfaceplot plotten? Spiele- und Multimedia-Programmierung 5
J Java3d setTextureTransform verändert J3DGraphics2D Spiele- und Multimedia-Programmierung 4
J Hilfe: Rotation X und Y Achse (Java3d) Spiele- und Multimedia-Programmierung 12
K Java3D: LineStripArray Spiele- und Multimedia-Programmierung 2
P Java3D - Zylinder genau wie Vektor ausrichten Spiele- und Multimedia-Programmierung 5
Developer_X Java3D Mensch Ärgere Dich nicht. Spiele- und Multimedia-Programmierung 10
C JAVA3D Rotation um einen bestimmten Punkt Spiele- und Multimedia-Programmierung 20
Developer_X Java3D-Ungeeignet für 3D Spiele wegen Heap Space=? Spiele- und Multimedia-Programmierung 23
Developer_X Java3D Canvas post Renderer und? Spiele- und Multimedia-Programmierung 5
A Java3D Sichtweite Spiele- und Multimedia-Programmierung 2
"Er" Kamera rotation in Java3D Spiele- und Multimedia-Programmierung 2
A Java3D: Behavior scheduling bounds Spiele- und Multimedia-Programmierung 3
Developer_X THE BALL (needs Java3D) Spiele- und Multimedia-Programmierung 34
Developer_X Java3D Game_(die erste) Spiele- und Multimedia-Programmierung 2
Developer_X Java3D und while schleifen Spiele- und Multimedia-Programmierung 4
Developer_X Collisionserkennung in Java3D Spiele- und Multimedia-Programmierung 3
Developer_X Java3D Node -> Obj Data Spiele- und Multimedia-Programmierung 2
Developer_X Figuren werden nicht angezeigt (Java3D) Spiele- und Multimedia-Programmierung 5
S PDFRenderer und Java3D Spiele- und Multimedia-Programmierung 2
Developer_X Java3D- der Mausklick auf Nodes Spiele- und Multimedia-Programmierung 3
Developer_X Java3D Point Sound Spiele- und Multimedia-Programmierung 71
Developer_X Lines in Java3D Spiele- und Multimedia-Programmierung 4
V Java3D: HUD erstellen Spiele- und Multimedia-Programmierung 2
V Java3D: scheinende Sonne Spiele- und Multimedia-Programmierung 4
V Java3D: Ringe für Saturn erstellen Spiele- und Multimedia-Programmierung 8
V Java3D: automatisches Bewegen der Kamera Spiele- und Multimedia-Programmierung 19
V Java3D: mehrere ViewingPlaforms in Sonnensystem Spiele- und Multimedia-Programmierung 8
Developer_X Thread in Java3D Spiele- und Multimedia-Programmierung 8
B Java3D .obj dateien Spiele- und Multimedia-Programmierung 2
Developer_X Java3D's next TopModel Spiele- und Multimedia-Programmierung 16

Ähnliche Java Themen

Neue Themen


Oben