[Java3D] Probleme bei Animation

G

GlasgowKid

Gast
Hallo allerseits,

ich baue gerade für einen Uni-Kurs das Brettspiel "Das verrückte Labyinth" in Java3D nach. Ein Spielzug dabei ist, dass man einen Spielstein nimmt und an einer beliebigen Stelle im Brett einschieben kann, wobei ein neuer Spielstein für die nächste Runde frei wird. Das Picking und auch das reine Verschieben klappt tadellos, ich möchte es aber gerne animiert darstellen und komme mit dem Alpha-Objekt nicht ganz klar.

Es soll eine Animationsfolge entstehen:
1. Neuer Spielstein wird über einen TransparencyInterpolater eingeblendet
2. Die Spielsteine aus der Reihe des quadratischen Spielbretts werden verschoben.
3. Der überflüssige Spielstein wird wieder ausgeblendet.

Das Einblenden funktioniert auch schon, aber nur dann, wenn im Alpha-Objekt der Loop-Count auf -1 oder einem Wert über 3 oder 4 steht. Die Animation soll aber nur einmal ausgeführt werden. Ich habe versucht mit den anderen Werten rumzuspielen, insbesondere mit der Verzögerung vor und nach dem triggern, aber irgendwie bekomme ich kein gutes Gefühl für richtige Einstellungen. Was läuft da verkehrt?

Als zweite Frage, würde ich gerne wissen, wie ich mehrere Animationen hintereinander ausführen kann. Also, wie kann ich sicherstellen, dass die nächste Animation erst gestartet wird, wenn die vorige beendet wurde. Und natürlich soll auch das Picking und der gesamte Spielverlauf quasi unterbrochen werden. Ich habe es mit der Alpha-Funktion finished() probiert, weiß aber nicht, ob das die korrekte Herangehensweise ist.

Hier der Quellcode:
Java:
private void playGangfeldAnimation(HashMap<String, Gangfeld> arg1) {
	BranchGroup objRoot = new BranchGroup();
	GangfeldBG pos = this.getGangfeldBG(arg1.get("Position")); // Position des einzuschiebenden Feldes
	GangfeldBG field = this.getGangfeldBG(arg1.get("Einschub")); //Einzuschiebendes Feld

	// Position wird auf transparent gesetzt
	for(Appearance app : pos.getAllAppearence(pos)) {
		app.setTransparencyAttributes(new TransparencyAttributes(TransparencyAttributes.BLENDED, 1f));
	}

	// Einzuschiebendes Feld wird eingeblendet             
	Alpha alpha = new Alpha(1, Alpha.DECREASING_ENABLE, 0, 10000, 5000, 0, 1000, 5000, 0, 1000); //TODO
	TransparencyAttributes target = new TransparencyAttributes(TransparencyAttributes.BLENDED, 1.0f);
	target.setCapability(TransparencyAttributes.ALLOW_VALUE_WRITE);
	
	TransparencyInterpolator transInt  = new TransparencyInterpolator(alpha, target);
	transInt.setSchedulingBounds(new BoundingSphere());
	transInt.setMinimumTransparency(1f);
	transInt.setMaximumTransparency(0f);
	
	for(Appearance app : field.getAllAppearence(field)) {
		app.setTransparencyAttributes(target);
	}
	objRoot.addChild(transInt);
	objRoot.addChild(field);
	this.getTrans(pos).addChild(objRoot);
	int i=0;
	while(!alpha.finished()) i++;
	System.out.println(i);
}
 

Marco13

Top Contributor
Ohne ein KSKB ist das schwierig nachzuvollziehen, nur 2 kleine Hinweise:
while(!alpha.finished()) i++;
ist "busy waiting" und sollte in keinem Fall gemacht werden.

Und eine threoretische Möglichkeit, mehrere Alphas hintereinander auszuführen wäre sowas wie
Code:
long start0 = 10;
long end0 = start0+10;
long start1 = end0;
long end1 = start1+10;
Alpha a0 = new Alpha(start0, end0...);
Alpha a0 = new Alpha(start1, end1...);
aber es stimmt, es wäre natürlich schön wenn's da eine eher "ereignisgesteuerte" Möglichkeit gäbe...
 
G

GlasgowKid

Gast
Hallo Marco,

vielen Dank für die Antwort. Was ist denn ein KSKB? Deine Lösung mit mehreren Alpha-Objekten gefällt mir gut. Meine Frage wäre, was du mit Start- und Endzeit des Alphaobjekts meinst oder wie ich die berechenen kann. Es gibt ja beim Erstellen des Objekts die triggerTime und die phaseDelayDuration. Der Unterschied ist mir nicht ganz klar. Und über die Methode setStartTime(long startTime)kann eine weitere Zeit gesetzt werden. Aber auch dort ist mir nicht klar was eine Startzeit von 10 bedeutet. Statt einer Endzeit gibt es ja auch nur increasingAlphaDuration und alphaAtOneDuration. Was die increasingAlphaRampDuration aussagt ist mir auch nich unklar. Das Problem der mehrfachen Animationen ließe sich so sicherlich recht gut lösen, aber warum die Animation bei einem loopCount von 1 gar nicht erst angezeigt wird, bleibt mir schleierhaft. Gibt es denn irgendwelche Erfahrungwerte wie ich die Eigenschaften des Alpha-Objekts günstig einstellen kann?

Viele Grüße,
Daniel
 

Marco13

Top Contributor
Ein KSKB ist das, was erscheint, wenn man mit der Maus kurz über dem ' KSKB ' stehenbleibt.

Die Start- und Endzeit bezogen sich auf den Zeitraum, in dem das Alpha sich verändernde Werte liefern sollte. Das Alpha liefert ja ungefähr sowas wie
Code:
                 alphaAtOneDuration
1                __________________
                /                  \
               /                    \    alphaAtZeroDuration 
0 ------------/                      \----------------------
 |           |
 Start       Trigger
 
            ->   <-              ->   <-
             increasing           decreasing
             Alpha                Alpha
             Duration             Duration
(nicht 100% drauf festnageln, aber so in etwa)

Die Startzeit wird vom System festgelegt. Nach der 'trigger'-Zeit fängt das Alpha an, größere Werte zu liefern, die dann eine zeitlang (alphaAtOneDuration) bei 1.0 bleiben, danach gehen die Werte wieder runter auf 0 und bleiben da eine Weile. Die increasingAlphaRampDuration ist für nicht-konstante Beschleunigungen gedacht, wie genau müßte ich auch erst nachvollziehen.

Bin gerade über Draws a simple plot of a parameterized Java 3D Alpha Function to an AWT : Alpha3DJava gestolpert: Hab's nicht getestet, aber das könnte helfen, nachzuvollziehen, was das Alpha mit den jeweiligen Parametern genau macht.
 
G

GlasgowKid

Gast
Hallo Marco,

vielen Dank für deine Hilfe. Das kleine Programm hat mir super bei der Planung geholfen. Dass die Animation beim Loop-Count 1 nicht angezeigt wurde habe ich durch eine Trigger-Zeit von 10s gelöst, die aber in der tatsächlichen Darstellung nicht angezeigt wird. Bei einem kleineren Wert erscheint das Ergebnis der Animation sofort, bei einem größeren bemerkt man die angegebene Verzögerung. Da hilft auf jeden Fall rumspielen in 1000-Schritten mit dem Alpha-Objekt. Außerdem habe ich als Tipp bekommen die Startzeit des Alphas noch explizit an die Systemzeit anzupassen:

Java:
alpha.setStartTime(System.currentTimeMillis() - alpha.getTriggerTime());
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Maxim6394 [Java3D] Probleme bei Kollision Spiele- und Multimedia-Programmierung 7
Maxim6394 [Java3D] Probleme mit KeyFrame Animationen Spiele- und Multimedia-Programmierung 9
C Probleme mit Java3D (sun.awt.DrawingSurface) in Java 5 Spiele- und Multimedia-Programmierung 10
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
E Java3D Objekt skalieren per JSlider/JButton Spiele- und Multimedia-Programmierung 10
S Java3D: Primitives zu einem Objekt kombinieren Spiele- und Multimedia-Programmierung 7
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] lookAt Mausposition Spiele- und Multimedia-Programmierung 17
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: Kanten die hinter einem Objekt liegen werden gezeigt 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
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

Ähnliche Java Themen

Neue Themen


Oben