Performance-Probleme bei Schleife

Status
Nicht offen für weitere Antworten.

Illuvatar

Top Contributor
Ich habe ein bisschen Performanceprobleme bei der folgenden Methode:
Code:
	/**
     * Bewegt/Dreht die Kamera innerhalb eines Zeitraumes an den gegebenen Punkt.
     */
	public static void moveSmooth (SimpleUniverse simpleU, final Transform3D target, final long time, BranchGroup append)
	{
		//*
		final Object LOCK = new Object();
		final TransformGroup tg = get (simpleU);
		final Transform3D t3d = new Transform3D();
		tg.getTransform(t3d);
		final Vector3f trans1 = new Vector3f();
		t3d.get(trans1); //Starttranslation
		final Vector3f trans2 = new Vector3f();
		target.get(trans2); //Zieltranslation
		final Vector3f transNow = new Vector3f(trans1); //wird in der Schleife verwendet
		final Vector3f trdiff = new Vector3f ();
		trdiff.sub(trans2, trans1); //auf Differenz der Vectoren setzen
		final Quat4f rot1 = new Quat4f();
		t3d.get(rot1);
		final Quat4f rot2 = new Quat4f();
		target.get(rot2);
		final Quat4f rotNow = new Quat4f(rot1);
		final Quat4f rotdiff = new Quat4f ();
		rotdiff.sub(rot2, rot1);
		System.out.println ("rotdiff: " + rotdiff);
		System.out.println ("rot1: " + rot1);
		System.out.println ("rot2: " + rot2);
		final long start = System.currentTimeMillis();
		final long end = start + time;
		final BranchGroup bg = new BranchGroup();
		bg.setCapability(BranchGroup.ALLOW_DETACH);
		Behavior b = new Behavior(){
			WakeupOnElapsedFrames wuoef = new WakeupOnElapsedFrames (1);
			float trans1x, trans1y, trans1z, trdiffx, trdiffy, trdiffz;
			float rot1x, rot1y, rot1z, rot1w, rotdiffx, rotdiffy, rotdiffz, rotdiffw;
			public void initialize()
			{
				trans1x = trans1.x; //Membervariablen initialisieren
				trans1y = trans1.y;
				trans1z = trans1.z;
				trdiffx = trdiff.x;
				trdiffy = trdiff.y;
				trdiffz = trdiff.z;
				rot1x = rot1.x;
				rot1y = rot1.y;
				rot1z = rot1.z;
				rot1w = rot1.w;
				rotdiffx = rotdiff.x;
				rotdiffy = rotdiff.y;
				rotdiffz = rotdiff.z;
				rotdiffw = rotdiff.w;
				wakeupOn (wuoef);
			}
			public void processStimulus (Enumeration criteria)
			{
				long now = System.currentTimeMillis();
				if (now >= end){
					bg.detach();
					synchronized (LOCK){
						LOCK.notifyAll();
					}
					return;
				}
				float percentage = (time)/(now-start);  //neue Variablen berechnen
				transNow.x = trans1x + trdiffx / percentage;
				transNow.y = trans1y + trdiffy / percentage;
				transNow.z = trans1z + trdiffz / percentage;
				rotNow.x = rot1x + rotdiffx / percentage;
				rotNow.y = rot1y + rotdiffy / percentage;
				rotNow.z = rot1z + rotdiffz / percentage;
				rotNow.w = rot1w + rotdiffw / percentage;
				System.out.println ("rot: " + rotNow);
				System.out.println ("trans: " + transNow);
				t3d.set (rotNow, transNow, 1);
				tg.setTransform(t3d);
				wakeupOn (wuoef);
			}
		};
		b.setSchedulingBounds(new BoundingSphere(new Point3d(), Double.MAX_VALUE));
		bg.addChild(b);
		append.addChild(bg);
		synchronized (LOCK){
			try {
		    	LOCK.wait((long)(time*1.5));  //im Fehlerfall
		    }catch (Exception ex) {}
		}// */
		tg.setTransform(target); //falls das letzte nicht genau gepasst hat, hier nochmal setzen
	}


Dis Methode bewegt die Kamera in der 3D-Ansicht (Java3D) von einer Position zu einer anderen. Dazu benutze ich eine anonyme Konkretisierung von Behavior. Nach jedem angezeigten Frame (Bild auf der Ausgabefläche) wird die Methode processStimulus ausgeführt, bis der Zeitraum vorüber ist. Quat4f ist einfach eine Klasse, die vier Variablen speichert, um eine Rotation darzustellen, Vector3f hat 3 Variablen x/y/z. Bei jedem Durchlauf wird der Quotient aus abgelaufener und Gesamtzeit berechnet, und so ein neuer Vector3f bzw. Quat4f berechnet. Ich greife in der Schleife schon nicht mehr auf die Variablen von außen zu und erstelle keine neuen Objekte. Blöderweise ruckelt das ganze trotzdem ein bisschen (und mein PC ist nicht grad der schlechteste). Sieht jemand irgendwo etwas performancefressendes in der processStimulus-Methode?
 

dotlens

Top Contributor
diese methode wird so wie ich das verstehe ziemlich oft ausgeführt. wäre evtl besser wenn du die Objekte ausserhalb der Methode erstellst, damit nicht jedesmal neue erstellt werden müssen...
aber vieleicht stimmt das auch nicht, ist nur so ne überlegung.
 

Illuvatar

Top Contributor
Es dreht sich nur um die processStimulus-Methode der inneren Klasse, in der keine Objekte erstellt werden.
 

Illuvatar

Top Contributor
RRAAAHHHH!!!!! Ich IDIOT!
Int durch int gibt int, und wenn ichs noch so sehr in nen float caste...
Und wenn ab der hälfte der Zeit die percentage-Variable auf 1.0 ist, sieht das alles eben etwas ruckelig aus ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Performance-Probleme mit Joda-Time Allgemeine Java-Themen 3
R DBUnit Performance Probleme Allgemeine Java-Themen 0
S starke performance probleme des forums Allgemeine Java-Themen 10
i<3java [Groovy/Grails](oder auch java) Mögliche Performance Probleme bei Mailversendung Allgemeine Java-Themen 2
8u3631984 Frage Performance bei Linked List und Array List Allgemeine Java-Themen 5
H Performance einer Monte-Carlo-Simulation verbessern Allgemeine Java-Themen 6
goldmensch Datentypen Welche Methode hat die bessere Performance? Allgemeine Java-Themen 12
H Watson-Crick-Complement Performance Allgemeine Java-Themen 18
L Best Practice Auslagerung von Code = Performance Optimierung? Allgemeine Java-Themen 4
B Performance Messungen Allgemeine Java-Themen 4
J Threads verbessern die Performance NICHT ? Allgemeine Java-Themen 8
X Performance für Tomcat / Apache optimieren Allgemeine Java-Themen 2
I Performance - JDBC UPC PoolDataSoure Allgemeine Java-Themen 0
E Lambda filter performance Allgemeine Java-Themen 2
A Jasper Report Performance bei PDF erzeugen Allgemeine Java-Themen 0
A Best Practice Variablen vertauschen - Performance Allgemeine Java-Themen 1
P Performance: super explizit erwähnen oder weglassen? Allgemeine Java-Themen 5
C Performance Tips Allgemeine Java-Themen 13
A Performance/Speicherplatz-Nutzung bei Tests Allgemeine Java-Themen 6
R Java Performance testen Allgemeine Java-Themen 18
StrikeTom Java Performance Fragen Allgemeine Java-Themen 5
V Performance steigern Allgemeine Java-Themen 7
D Reflection-Performance Allgemeine Java-Themen 7
M Einfluss von Caching auf die Performance (große Arrays) Allgemeine Java-Themen 24
R Collections Performance einer HashMap Allgemeine Java-Themen 26
D Performance Objektallokation Allgemeine Java-Themen 28
J Java Performance nicht nachvollziehbar Allgemeine Java-Themen 3
I Library für High Performance Mime Type Erkennung Allgemeine Java-Themen 8
S Performance Frage: Objekt oder static? Allgemeine Java-Themen 33
M Runtime.exec() - Performance / Frage zu Threads Allgemeine Java-Themen 5
M Performance Allgemeine Java-Themen 6
M Performance Allgemeine Java-Themen 5
E Performance website download Allgemeine Java-Themen 13
MQue Performance Methodenaufruf - if Abfrage Allgemeine Java-Themen 19
hdi Was frisst in meinem Programm den Speicher / verschlechtert die Performance Allgemeine Java-Themen 11
J Performance von Java GUI-Anwendungen Allgemeine Java-Themen 2
U Java Performance im Vergleich zu C++ in speziellem Anwendungsfall Allgemeine Java-Themen 6
S Performance und Function Call Depth Allgemeine Java-Themen 6
H Performance Vorteil durch Wechsel der JVM? Allgemeine Java-Themen 6
A Performance: byte[] in byte[][][] konvertieren Allgemeine Java-Themen 2
T Performance ArrayList#remove Allgemeine Java-Themen 8
ARadauer Performance Pptimierung -Lesen/Schreiben Allgemeine Java-Themen 10
Chris81T Performance Problem durch mehrfaches Starten eines JAVA Prog Allgemeine Java-Themen 8
G Hibernate, JTable und Performance Allgemeine Java-Themen 17
M Listener und Performance Allgemeine Java-Themen 9
P Performance: Ziehen ohne Zurücklegen (große Datenmenge) Allgemeine Java-Themen 10
D Performance: ArrayList vs. Array vs. "Eigene Liste&quot Allgemeine Java-Themen 8
M nichtreferenzierte Objekte auf NULL setzen -> Performance Allgemeine Java-Themen 4
S Ursache für schlechte Performance Allgemeine Java-Themen 2
L Java Performance Check Tool Allgemeine Java-Themen 3
S Performance von Comparator Allgemeine Java-Themen 3
egrath Performance Problem mit File-I/O Allgemeine Java-Themen 6
S Performance Problem Allgemeine Java-Themen 11
X Java Performance auf Sun Systemen bzw. generell Allgemeine Java-Themen 4
T Performance String-Operationen und StringBuffer (1.4und 1.5) Allgemeine Java-Themen 18
P miese performance bei nem BufferedImage + repaint :( Allgemeine Java-Themen 6
T Performance-Grundlagen Allgemeine Java-Themen 4
G Performance Problem bei der Übertragung Server zum Client Allgemeine Java-Themen 3
V Performance Leck finden Allgemeine Java-Themen 3
T Tile Game Performance Allgemeine Java-Themen 32
M Performance enorm langsam Allgemeine Java-Themen 26
F Performance von Reflection vs Statisches Coden Allgemeine Java-Themen 4
M Performance: Java zu C/C++ bei Datenbankanwendung Allgemeine Java-Themen 3
Y unnecessary cast & Performance Allgemeine Java-Themen 29
conan2 Performance von paint() Allgemeine Java-Themen 2
G Performance JDOM - DOM - eigene HashMap (SAX) Allgemeine Java-Themen 2
F Bilder als "Thumbnails" laden - Performance Allgemeine Java-Themen 6
S Java3D Performance optimieren Allgemeine Java-Themen 5
F Wenn ihr Performance wollt nehmt C++ Allgemeine Java-Themen 39
N Performance-Test (Geschwindigkeit von Methoden vergleichen)? Allgemeine Java-Themen 4
S Performance Test mit JMeter Allgemeine Java-Themen 2
T Performance Allgemeine Java-Themen 8
J Anfängerliste für gute Performance? Allgemeine Java-Themen 3
Luma Performance-Problem mit RandomAcces File Allgemeine Java-Themen 4
I Performance bei "String <-> Byte"-Umwandlung Allgemeine Java-Themen 4
C Performance von FOR Schleifen Allgemeine Java-Themen 25
C Performance Vergleich, Java vs. Tcl/Tk Allgemeine Java-Themen 3
C Probleme beim Erstellen eines runnable-jar files Allgemeine Java-Themen 1
S Umstellung von File auf Path - Probleme mit Stream Allgemeine Java-Themen 5
C Probleme mit javax.mail.Session Allgemeine Java-Themen 8
M tomcat probleme Allgemeine Java-Themen 1
N Division macht Probleme Allgemeine Java-Themen 14
B Java Reflection Probleme beim wehcselseitigen Referenzieren zweier Klassen/Objekte Allgemeine Java-Themen 14
MarvinsDepression Probleme mit relativem Dateipfad Allgemeine Java-Themen 1
G Geotools Probleme nach PC-Wechsel Allgemeine Java-Themen 6
nibe1501 GUI Probleme Allgemeine Java-Themen 16
C Probleme mit dem WindowBuilder Allgemeine Java-Themen 3
P Selenium . Probleme ein Iron Icon Element anzusprechen Allgemeine Java-Themen 2
B Compiler-Fehler Probleme beim Kompilieren mit Jsoup Allgemeine Java-Themen 8
K VisualVM Profiling Remote Probleme Allgemeine Java-Themen 1
O Leerzeichen und Umlaute im Pfad einer Java Applikation machen Probleme Allgemeine Java-Themen 13
M Probleme bei Eclipse wenn ich entpacke Allgemeine Java-Themen 15
D Regex Probleme Allgemeine Java-Themen 2
M Probleme jar datei. Allgemeine Java-Themen 2
L Vererbung Verständnis Probleme Vererbung Allgemeine Java-Themen 2
Dann07 Probleme mit OpenAL Allgemeine Java-Themen 0
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
V Compiler-Fehler Online Compiler Probleme Allgemeine Java-Themen 4
M Probleme mit Negamax-Algorithmus Allgemeine Java-Themen 29
M Probleme mit BigDecimal Allgemeine Java-Themen 1

Ähnliche Java Themen

Neue Themen


Oben