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

1

22.07.2010, 22:55

Frames per Second - Wie berechnen

Hallo,

ich habe mich gewundert wie man denn "richtig" die FPS ausrechnet, weil Fraps mir immer was anderes sagt. Sogar was besseres.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

2

22.07.2010, 22:59

1/frametime in sekunden
es empfiehlt sich natürlich einen durchschnittswert zu nehmen.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

3

22.07.2010, 23:48

So wie man es auspricht: Frames/Sekunden.

4

23.07.2010, 10:10

Eigentlich ist es viel besser, die Frametime anzuzeigen:
http://www.mvps.org/directx/articles/fps…_frame_time.htm
Lieber dumm fragen, als dumm bleiben!

5

23.07.2010, 14:34

Danke Jonathan_Klein, ist n interessanter Artikel.
stɪl traɪ tuː θɪŋk ˈpɒzətɪv

6

26.07.2010, 01:39

Falls du das einprogrammieren willst, dann habe ich hier den Quellcode, den ich benutze:

Zitat

// INCLUDES
#include <cstdio>

// Hier wird die Statzeig genommen, bevor der Frame gerendert wird;
start_time = GetTickCount();

// HIER wird Gerendert und das Spielgeschehen aktuallisiert

// hier wird dann die differenz ausgerechnet: Man muss wissen wie lange der Computer gebraucht hat um die das Rendern des
// Frames abzuschließen
dt = GetTickCount()-start_time;

// Mit der Differenz kann man dann die FrameRate und die FrameTime ausrechnen.
FrameRate = 1000.0f/dt;
FrameTime = (0.001f*dt)/10;

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Herror« (26.07.2010, 01:45)


NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

7

26.07.2010, 10:00

wobei diese zeile:

C-/C++-Quelltext

1
dt = GetTickCount()-start_time; // nicht vergessen start_time vor der schleife mit GetTickCount() zu initialisieren^^

direkt vor dieser liegen sollte:

C-/C++-Quelltext

1
start_time = GetTickCount();


das ist etwas genauer und sicherer weil in deiner version noch mindestens die schleifenbedingung dazwischen liegt, die nicht gemessen wird.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

8

26.07.2010, 15:06

Stimmt.
Danke, hab das gleich mal bei mir geändert ^^

Auf jeden fall funktioniert das so:

Wenn die differenz (dt) einer Millisekunde entwpricht, dann schafft der Rechner pro Millisekunde ein Frame, also 1000 Frames in der Sekunde.
Wenn dt nun 2ms sind, dann schafft der Rechner nur 500 frames in der sekunde usw.

FrameRate = 1000.0f/dt;

Mit der FrameTime kannst du dann ganz ordentlich deine Spielgeschwindigkeit kontrollieren.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Herror« (26.07.2010, 15:12)


daG

Treue Seele

Beiträge: 130

Wohnort: Hamburg

  • Private Nachricht senden

9

26.07.2010, 18:53

Eine weitere Möglichkeit wäre die einzelnen Frames zu zählen. Der Vorteil bei dieser Methode ist 1. dass die Zahl nicht so oft wechselt (nur einmal pro Sekunde) und zweitens nicht so stark schwankt. Es kann durchaus mal vorkommen, das ein Frame sehr viel länger braucht um berechnet zu werden als sonst. Wenn du die Anzahl aller Frames pro Sekunde zählst, hast du einen ganz guten Mittelwert.


C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
frames++;

time = GetTickCount();

if(time > lastTime + 1000)
{
    fps = (time - lastTime) / 1000 * frames;

    lastTime = time;
    frames = 0;
}

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

10

16.07.2013, 15:09

Eigentlich ist es viel besser, die Frametime anzuzeigen
Nur leider komplett sinnlos, wenn man wissen will, ob man über die kritischen 24 FPS (oder 60 FPS) kommt oder nicht. Das will doch niemand im Kopf umrechnen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Werbeanzeige

Ähnliche Themen