fps (sorry... in german)

Started by
23 comments, last by _Tobias_ 22 years ago
Hi... Vielleicht kann hier ja einer Deutsch :-) Ich hab da mal eine Frage an Profis: Mein OpenGL-Spiel läuft eigentlich ganz prima. Fast immer durchgehend 85fps bei 1280*960*32. Alles butterweich. Falls die Framerate mal fallen sollte, fällt sie normalerweise auf 47.5fps, da der VSync eingeschaltet ist. Das sieht immernoch sehr gut aus, aber deutlich unschärfer als bei 85fps (v.w. ab 30fps sieht man keinen Unterschied mehr... Blödsinn). Das Blöde ist nur, daß es ruckelt, wenn die Framerate variabel und nicht konstant ist. D.h. an Stellen, bei dennen z.B. öfter mal zwischen 85fps und 47.5fps gewechselt wird, treten starke Ruckler auf. Nachdem ich nun die ganze letzte Nacht gegrübelt habe, bin ich zu folgender Erkentniss gekommen: Der Code sieht ungefähr so aus: DO { double delta = GetDeltaTime(); Berechnungen(delta); Male(); } Es wird also immer die Zeitdifferenz ''delta'' gemessen und damit die neuen Spielerkoordinaten und dynamische Szenerie berechnet. Anschließend wird dann alles gemalt. Jetzt ist es aber so, daß ''delta'' sich ja immer auf das zuletzt berechnete Frame bezieht. Mal angenommen, die Framerate beträgt 40fps. Also ist ''delta'' = 0.025 (in Millisekunden). Die Geschwindigkeit des Spielers ist z.B. 2 m/sek. Also wird beim nächsten Bild die Position des Spielers um (2m/sek * delta)inkrementiert. Alles schön und gut... Wenn nun aber das malen des neuen Bildes nun nicht mehr 0.025 Sekunden braucht, sondern z.B. nur 0.0125, dann würde die Framerate auf 80fps ansteigen und das neue Bild würde 0.025 Sekunden eher (also genau einen VSync weniger abwarten) gemalt werden, da das VSync-Signal ja noch nicht ausgelöst worden war. Somit hat sich in dem neuen Bild die Geschwindigkeit des Spielers verdoppelt: Er hat die nun die doppelte Strecke zurückgelegt, bzw. die Zeit zum Anzeigen des neuen Bildes hat sich halbiert. Vorher waren es ja 40fps und alle 0.025 Sekunden wurde ein neues Bild angezeigt, nun sind es 0.0125 ein neues Bild. Und genau an diesem Übergang entsteht nun folglich ein Ruckeln. Und wenn nun die Framerate wieder fällt, da tritt der Effekt wieder auf.... Man müßte also nicht die Zeitdifferenz zwischen den letzten beiden Bilder messen, sondern zwischen dem letzten und dem neu zu zeichnenden Bild... Das kann man aber nicht, da man ja nicht weis, wielange der Rechner am zeichnen sein wird... Hm.... aber wieso tritt dieser Effekt nicht bei kommerziellen Spielen auf? Gibt es da einen Trick oder ein Verfahren, das ich noch nicht kenne? Wäre super, wenn mich da mal jemand aufklären könnte...
Advertisement
Hmm, das gleiche Problem hab ich auch, nur hab ich noch nicht dran gedacht, daß das dadran liegen könnte!

Wenn Du Fragen auf deutsch stellst, würde ich Dir aber nen dt. Board empfehlen:
http://www.spieleentwickler-board.de/
http://www.usf.de/cgi/usf/ubbcgi/Ultimate.cgi

Letzteres kenn ich persönlich kaum, schaue selten rein, aber wenn du im 1. (das DSB) ne Frage stellst, wird die in der Regel auch kompetent beantwortet.
Oder schau im EUIRC-Netzwerk einfach mal in den channel #gamedev.ger. Da sitzen auch ein paar sehr fähige Programmierer!

bb,
fallen
Hi...

Danke für die Links... ich habe schon länger nach einem Deutschen Board gesucht...
Ansonsten hoffe ich, daß es irgendwo eine Problemlösung für dieses Ruckeln gibt... Falls ja, kann ich es hier mal posten...

Danke...
Please post in english so that other people with the same
problem can take part and learn from this discussion.
I told him two german boards so he won''t post here again in german!
Hey let people post here in whatever language they want to. If their english is bad let them post in their own language. You know people from all over the world uses this forum.

(not intended as a flame)

- Jesper
the only problem with that idea is that ppl who cant speak the lang dont understand and thus cant learn from other ppls problems.

I see the point you are making, but even bad english can be cut though, or maybe someone who could speak English better could translate from whatever langauge to english.

Just some ideas
I know but I think people are quick to diss people if they write in their own language. I''m sorry but I think one post in german between I don''t know how many in english does not hurt. Just my opinion. IMHO <- you know...
if you're so curious about what they are talking about learn german. or copy and paste the text into one of the million web translator programs out there.

english isn't everyone's language and people can post in whatever language they want. it's called reality. in reality only a minor percenctage of the world speaks english. deal with it.

also, given this board's tendancies, i guarantee that that question was asked at least 25 times before. so no doubt you already have the answer

-me

[edited by - Palidine on April 23, 2002 2:01:37 PM]
Thanks for the 2 deutsche Foren Links... suche auch schon lange.

Greets, Austrian Coder

This topic is closed to new replies.

Advertisement