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

11

17.12.2008, 16:38

gut dann wäre das erledigt, hier der code falls jemand die selbe frage hat:

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
27
28
29
void main{

double startTime = getTime();
unsigned int frames = 0;
double FPS = 0.0f;
double activTime = 0.0f;

while(run){

   SwapBuffers();
   activTime = getTime();
   if( (activTime - startTime) > 1.0 || frames == 0 ){
      FPS = static_cast<double>(frames) / (activTime - startTime);
      startTime = activTime;
      frames = 0;
   }
   this->frames++;
   
  //update input

  //clear screen

  if(frames % 60 <= 0){ //bei jeden 60tel frame rendern

    //rechnen,rendern

  }
  //update screen

  //input anfrage 


}

}

Black-Panther

Alter Hase

Beiträge: 1 443

Wohnort: Innsbruck

  • Private Nachricht senden

12

17.12.2008, 19:09

@UL:
Sobald aber Physik im Spiel ist, ist eine fixe Framerate, also rel. konstante DeltaT von Vorteil. Viele numerische Integrationsverfahren arbeiten bei fixen Zeitschritten stabiler (RK4 beispielsweise [weit verbreitet in diesem Sektor]), analytische Kollisionsvorhersagen funktionieren genauer, usw.

Und bezüglich der Kollisionstest... Ok, für einen Punkt kann man noch ohne weiteres den zurückgelegten Weg miteinbeziehen. Aber bei Kollisionen von zwei konkaven Objekten sieht die Sache schon ganz anders aus. Es gibt zwar kontinuierliche Verfahren zur Kollisionsbestimmung, doch sind diese alles andere als performant. Dann gibt es da natürlich auch noch das Bisektionsverfahren, was imo für den Dauereinsatz auch zu langsam ist. Normalerweise wird es nur verwendet, um den Kontaktzeitpunkt zu bestimmen, nicht um Kollisionen zu detektieren. Andere Verfahren erweitern die Boundingvolumes (meistens Spheres in diesem Zusammenhang) um einen gewissen Betrag um den zurückgelegten Weg des Objekts zu berücksichtigen. Grundsätzlich eine gute Idee, solange der Zeitschritt nicht zu lange wird! Ist er kurz genug, ergeben sich mehr potentielle Kollisionen, die ansonsten ausgeschlossen werden könnten, und ist er zu groß sind die Boundingvolumes sowieso umsonst... --> Performance schmiert ab.

Kurz, wenns jetzt um relativ "einfache" Spiele geht, ist das Framebased-Rendering sicherlich nicht verkehrt (das Timebased hat ja keine Vorteile mehr... im Gegenteil. Der Verwaltungsaufwand steigt!), aber wenn dann zeitkritische Funktionalitäten dazukommen, die bis ins letzte optimiert sind, dann wird meist ein fixes delta t verwendet/erwartet!
stillalive studios
Drone Swarm (32.000 Dronen gleichzeitig steuern!)
facebook, twitter

13

17.12.2008, 22:30

Zitat von »"unsigned long"«

Nexus
Wenn einem sowas passiert, sollte man seine Berechnungen noch einmal überdenken, da man viel zu kurz gedacht hat. Wenn ich einen Punkt bewege prüfe ich noch vor der Kollisionsroutine ob es da eine Kollision geben könnte und dann prüfe ich diese mit dem möglichen Objekt.
Ja, eben, überdenken. Das kann zu viel mehr Arbeit führen, obwohl es ohne auch geht. Nur schon bei einfacher Rechteckkollision muss man den ganzen Weg des Objektes zurückverfolgen. Oder wenn irgendetwas alle 0.03 Sekunden ein Partikel ausstossen soll. Die nachträgliche Berechnung wird dann mühsam, wenn man eine gleichmässige Verteilung der Partikel haben will.

Zitat von »"unsigned long"«

Windows kann Nachrichten nicht mehr Just-In-Time verarbeiten und so könnten wichtige Nachrichten "verschluckt" werden oder treffen zu spät ein, was enorme Folgeschäden mit sich führen könnte.
Hm, da kenne ich mich jetzt zu wenig aus. Betriebssystemspezifische Nachrichten, Benutzereingaben? Ich hatte bis jetzt allerdings noch nie ein Problem mit der oberen Begrenzung der Framerate...

Mal davon abgesehen finde ich es persönlich schöner, wenn ein Spiel kurzzeitig ein wenig langsamer läuft und man dafür alles mitkriegt, als wenn sich die Spielsituation nur in Sprüngen verändert.

kiba

Alter Hase

  • »kiba« ist der Autor dieses Themas

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

14

21.12.2008, 14:55

hätte da noch ne frage zur delta methode
wie kann ich richtig abfragen:
60 frame pro secunde

K-Bal

Alter Hase

Beiträge: 703

Wohnort: Aachen

Beruf: Student (Elektrotechnik, Technische Informatik)

  • Private Nachricht senden

15

22.12.2008, 10:38

Hmm, bei den hier gezeigten Beispielen wäre aber immer 100% CPU usage im Spiel, oder sehe ich das falsch?

Anonymous

unregistriert

16

22.12.2008, 10:47

normal

K-Bal

Alter Hase

Beiträge: 703

Wohnort: Aachen

Beruf: Student (Elektrotechnik, Technische Informatik)

  • Private Nachricht senden

17

22.12.2008, 11:39

Naja aber wenn ich ne feste Framerate hab, dann könnte ich doch theoretisch wieder etwas CPU Leistung freigeben :) Ich dachte eigentlich immer, dass das überhaupt der Sinn fester Framerates ist.

Anonymous

unregistriert

18

22.12.2008, 11:44

man soll sich nie mit dem betriebssystem anlegen wenn es um resourcen-verwaltung geht. Wenn Windows mehr braucht für kritische Dinge, wird es sich das schon nehmen.

Der "Sinn" hinter festen Framerates ist denke ich mal eher Faulheit gewesen.

19

23.12.2008, 19:46

Zitat von »"unsigned long"«

Der "Sinn" hinter festen Framerates ist denke ich mal eher Faulheit gewesen.
Und was ist mit den Einwänden von Black-Panther und mir?

Anonymous

unregistriert

20

23.12.2008, 19:48

Mir ist es bisher noch nie vorgekommen, das ich wegen Physik eine feste Framerate benötige und die Nachrichtenverarbeitung von Windows blockiere.

Werbeanzeige