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

kiba

Alter Hase

  • »kiba« ist der Autor dieses Themas

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

1

17.04.2009, 20:52

FPS richtig ermitteln

Ich bin ein bischen verwirrt als ich durch meine funktion durchgegangen bin und hab mich gefrage es heißt ja FramePerSekunde.
Also soll es den Framezähler um 1 erhöhen wenn ich 1 Bild(1 dreieck,1 rechteck...) render... oder?
Und wollte mal wissen was davon jetzt das richtige FPS ergibt:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//...

startTime = glfwGetTime();

//game while{


//1 Bild rendern, glBegin(GL_QUADS) ... glEnd()

//1 Bild rendern, glBegin(GL_QUADS) ... glEnd()

//1 Bild rendern, glBegin(GL_QUADS) ... glEnd()

//1 Bild rendern, glBegin(GL_QUADS) ... glEnd()

//1 Bild rendern, glBegin(GL_QUADS) ... glEnd()

//...


glfwSwapBuffers();
activTime = glfwGetTime();
if( (this->activTime-startTime) > 1.0 || this->frames == 0 ){
      FPS = static_cast<double>(frames) / (activTime-startTime);
      startTime = activTime;
      frames = 0;
}
frames++;

//}


oder ist das das richtige:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//...

startTime = glfwGetTime();

//game while{


//1 Bild rendern, glBegin(GL_QUADS) ... glEnd()

frames++;
//1 Bild rendern, glBegin(GL_QUADS) ... glEnd()

frames++;
//1 Bild rendern, glBegin(GL_QUADS) ... glEnd()

frames++;
//1 Bild rendern, glBegin(GL_QUADS) ... glEnd()

frames++;
//1 Bild rendern, glBegin(GL_QUADS) ... glEnd()

frames++;
//...


glfwSwapBuffers();
activTime = glfwGetTime();
if( (this->activTime-startTime) > 1.0 || this->frames == 0 ){
      FPS = static_cast<double>(frames) / (activTime-startTime);
      startTime = activTime;
      frames = 0;
}

//}

Errschaffer

Alter Hase

Beiträge: 865

Wohnort: Frankfurt

  • Private Nachricht senden

2

17.04.2009, 20:55

Ersteres ist meines Wissens richtig. So habe ich es jedenfalls auch gemacht. Also nach jedem durch Lauf der GameLoop um eins erhöt.

3

17.04.2009, 21:00

Naja, also wenn du das mit dem Framezähler machen willst, dann darfst du den natürlich nicht bei jedem Dreieck hochzählen (!), sondern erst, wenn du das Bild dann für den Spieler sichtbar machst.
Also so:

Quellcode

1
2
3
4
5
6
1. Dreieck zeichnen
2. Dreieck zeichnen
3. Dreieck zeichnen
4. Dreieck zeichnen

Framezähler erhöhen, Bild sichtbar machen und wieder von vorne beginnen.


Sobald dann eine Sekunde vergangen ist, wirfst nen Blick auf den Framezähler, das sind dann die FPS. Framezähler wieder zurücksetzen und wieder eine Sekunde warten.

Alternativ, wenn du auch die Zeit weißt, die du für einen Frame (Bild) benötigst, dann verwende einfach den Kehrwert davon. (1 / vergangeneZeit)
Bei der Methode hast in jedem Frame ne aktuelle Framerate, nicht nur jede Sekunde.

Werbeanzeige