Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Jawaiica

Treue Seele

  • »Jawaiica« ist der Autor dieses Themas

Beiträge: 134

Wohnort: Hannover

Beruf: Student

  • Private Nachricht senden

1

15.08.2011, 20:19

kleine FPS Frage...

Hallo Leute,

ich wollte heut mal die FPS meiner Szene berechnen lassen und in eine Text Datei speichern und da hab ich mich gefragt ob das überhaupt stimmen kann bzw. ob ich grade einen Denkfehler habe. Die FPS berechne ist so:

Am Anfang der Hauptschleife nehme ich die Zeit mit timeGetTime() und am Ende nehme ich diese ebenfalls und ziehe dann den ersten Wert von dem zweiten Wert ab. Das ist ja dann die Zeit in Millisekunden wenn ich mich nicht irre. Jedenfalls teile ich den Wert jetzt durch 1000 um auf Sekunden zu kommen.

Um die FPS zu berechnen habe ich dann 1000 durch den Wert gerechnet nur dann bekomme ich Werte um die 62500 raus oO. Irgendwas mache ich grade Falsch, dass weiß ich nur ich will grade einfach nicht drauf kommen was >.<.

Naja ich hoffe ihr könnt mir kurz helfen :x Danke schon einmal^^
Mfg Jawaiica
"Die Sekunde ist die Dauer von 9 192 631 770 Perioden der Strahlung, die dem Übergang zwischen den beiden Hyperfeinstrukturniveaus des Grundzustandes des Atoms Caesium 133 entspricht."

2

15.08.2011, 20:26

Du meinst jetzt aber die SDL? :D
Warum nochmal mit 1000? :huh:

MfG
Check

Jawaiica

Treue Seele

  • »Jawaiica« ist der Autor dieses Themas

Beiträge: 134

Wohnort: Hannover

Beruf: Student

  • Private Nachricht senden

3

15.08.2011, 20:31

ne nicht SDL... ich programmiere grade mit DirectX9 und da wollt ich mir ne Timer Klasse schreiben. Wie meinst du mit 1000?
Beim ersten Mal habe ich durch 1000 geteilt, um halt auf die Sekunden zu kommen. Da ich nicht genau wusste, wie ich weiter machen sollte, hab ich gegooglet und kam dann auf einen Link, wo gesagt wurde, dass man dann 1000 durch die Zeit, die ich zum Rendern benötige, teilen muss, um dann zu wissen wie viele Bilder pro Sekunde ich habe. Ich bin heut ein wenig verpeilt.. ich glaub ich schau mir das morgen noch einmal in Ruhe an^^
"Die Sekunde ist die Dauer von 9 192 631 770 Perioden der Strahlung, die dem Übergang zwischen den beiden Hyperfeinstrukturniveaus des Grundzustandes des Atoms Caesium 133 entspricht."

4

15.08.2011, 20:33

Mach 1/ZeitVariable.
Denn du hast das Ganze in Sekunden, dann behandele es auch so. :thumbup:

MfG
Check

Jawaiica

Treue Seele

  • »Jawaiica« ist der Autor dieses Themas

Beiträge: 134

Wohnort: Hannover

Beruf: Student

  • Private Nachricht senden

5

15.08.2011, 20:36

Ahhh natürlich. Klar :D Danke für die Hilfe^^

MfG Jawaiica
"Die Sekunde ist die Dauer von 9 192 631 770 Perioden der Strahlung, die dem Übergang zwischen den beiden Hyperfeinstrukturniveaus des Grundzustandes des Atoms Caesium 133 entspricht."

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

15.08.2011, 20:41

Was dein Problem angeht: timeGetTime() liefert einen Integer, wenn du da also / 1000 machst wird, je nachdem wo dus machst, entweder 0 rauskommen (da deine Zeitdifferenzen sicherlich kleiner als 1000 sind) oder die Anzahl ganzer Sekunden die seit Systemstart vergangen sind...aufpassen auf Integerdivision. Ich würd lieber * 0.001f machen, das ist nicht nur schneller, sondern schützt auch vor der Ganzzahldivisionsfalle ;)

Rein prinzipiell denkst du richtig. Aber warum in eine Textdatei speichern? Das Schreiben in die Textdatei könnte eine große Bremse werden, wenn du das ständig machst. Außerdem wird die Genauigkeit von timeGetTime() ohne entsprechende Maßnamen nur schwer ausreichen um eine brauchbare Messung der Frametime zu erlauben. Wenn du die Frametime wirklich direkt messen willst solltest du besser QueryPerformanceCounter() verwenden. Eine andere Möglichkeit wäre, nicht die Frametime zu messen, sondern tatsächlich die FPS zu zählen. Mach dir einfach einen Counter den du in jedem Frame erhöhst. Dazu merkst du dir den Wert, den timeGetTime() hatte, als du die fps das letzte Mal ausgelesen hast. Immer wenn dieser Wert nun > 1000 wird, liest du deine FPS aus und setzt den Counter wieder auf 0.

Jawaiica

Treue Seele

  • »Jawaiica« ist der Autor dieses Themas

Beiträge: 134

Wohnort: Hannover

Beruf: Student

  • Private Nachricht senden

7

15.08.2011, 22:30

Ok, ich hab das jetzt einmal mit QueryPerformanceCounter gemacht und es klappt gut, danke :) Aber ich hätte da noch ne kleine Frage:

Ich Rendere "nur" sechs Dinge ( 3 Würfel und 3 Teapots[die rotieren] ) und habe "nur" ~60 FPS ist das normal(mein PC ist gut genug ^^)?

Edit: Ach ja, das mit der Ausgabe in eine Textdatei mache ich nur, weil ich noch keine Text klasse geschrieben habe, die mir die FPS oben links anzeigen könnte^^ Mache ich morgen aber dann brauch ich das mit der Textdatei auch nicht mehr machen.
"Die Sekunde ist die Dauer von 9 192 631 770 Perioden der Strahlung, die dem Übergang zwischen den beiden Hyperfeinstrukturniveaus des Grundzustandes des Atoms Caesium 133 entspricht."

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

15.08.2011, 22:31

Das hängt davon ab...

Jawaiica

Treue Seele

  • »Jawaiica« ist der Autor dieses Themas

Beiträge: 134

Wohnort: Hannover

Beruf: Student

  • Private Nachricht senden

9

15.08.2011, 22:43

Wovon hängt das ab? Meine Szene besteht aus:
einer Kamera
einem Point light
und aus den sechs erwähnten Modellen.
"Die Sekunde ist die Dauer von 9 192 631 770 Perioden der Strahlung, die dem Übergang zwischen den beiden Hyperfeinstrukturniveaus des Grundzustandes des Atoms Caesium 133 entspricht."

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

15.08.2011, 22:47

Und wie genau renderst du was genau? Du könntest genausogut fragen: "Ich brauche 10 min in den Supermarkt. Ist das normal? Warum ist das so?" ;)

Was die Ausgabe angeht: Schreib die FPS halt einfach in die Titelzeile deines Fensters ;)

EDIT: Wenn es ziemlich genau konstant 60 FPS sind könnts einfach daran liegen dass du VSync an hast.

Werbeanzeige