Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 17:02

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: fps Problem
BeitragVerfasst: Do Apr 19, 2007 15:28 
Offline
DGL Member

Registriert: Fr Nov 18, 2005 00:44
Beiträge: 57
die meisten denken jetzt wahrscheinlich: "mal wieder einer, der wissen will warum seine 400000 if's die fps runterkillen" aber falsch! Diesmal ist es mal wirklich katastrophal.

Ich habe nen DuoCore2 und ne GeforceGo7900, außerdem benutze ich die OGl Header ausm Sdk. Dort wird die Fps über nen Counter im IdleHandler abgehandelt. Mein Problem ist, dass der Idlehandler die Fps nicht mehr aktualisiert, während ich mit der Maus über der Form bin. Desweiteren boomt die Fps, wenn ich mit der Maus wieder die Form verlasse. zufälligerweiße ist der Wert der fps dann die Summe aller fps aus der Zeit, in der ich mit der Maus über der Form war (durchschnittlich geschätzt). Hin und wieder passiert es auch, dass die fps in einen nahezu unendlichen wert springen:
1,1175...E262 (ich glaube das ist schon etwas größer)

meine Frage ist, hat das mit meinem Laptop zu tun? Auf meinem anderen Rechner (1,3ghz 32bit CPU) läuft der IdleHandler ohne Mucken.

Ich habe an der IdleHandler; nichts verändert, ich lasse lediglich die fps in eine Form.Caption; anzeigen, genauso wie auf dem anderen Rechner auch.

wer das Problem kennt und eine Lösung parat hat, der darf sie gerne verraten. ^^

grüße

_________________
ist Ihnen schon mal aufgefallen, dass wenn Sie beim Wort Schlagersängerinnen die ersten 6 Buchstaben streichen, das 'e' durch ein 'f' ersetzen, die nächsten 7 Buchstaben rückwärts lesen und dann ebenfalls elemenieren und zusätzlich die beiden nebeneinanderstehenden n's durch ck ersetzen, das Wort 'ficken' ergibt?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 19, 2007 15:46 
Offline
DGL Member

Registriert: Mi Okt 16, 2002 15:06
Beiträge: 1012
Ich weiss nicht, aber ist es nicht so wenn du die Caption von dem Form änderst das es dann Refreshed wird und du via OnPaint zeichnen müsstest, weil da kommt er ja nicht in den Idle Handler rein, nur so ne vermutung.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 19, 2007 16:11 
Offline
DGL Member

Registriert: Fr Nov 18, 2005 00:44
Beiträge: 57
So ich lass die fps nun als Texture-Text im Orthomodus beim Rendern anzeigen, der Effekt bleibt der gleiche. Ich übergebe der Form nu gar nichts mehr, würde mich also wundern, wenn die jetzt refresh, oder so machen würde. Also es ist immer noch so, ich habe im Schnitt 60-61 fps, wenn ich die Maus nu über der Form lasse, bleibt der fps counter stehen und wenn ich, dann, nach meinetwegen 3 sekunden, wieder runter gehe von der Form, springt die fps spontan auf ca.240 und liegt mit der nächsten sekunde wieder bei ca.60.
An sich nicht wirklich schlimm, aber Bewegungen, die fps abhängig sind (was wohl alle sein sollten) bleiben dann stehen, sobald die Maus auf der Form ist. Geht die maus wieder runter, bewegt sich alles in einem schnecken Tempo, weil die fps ja nu 4mal höher sind, als sie wirklich sind und die zurückgelegte Strecke viel kleiner wird als sie sein müsst.

Warum es passiert kann ich mir absolut nicht erklären.. Momantan tippe ich auf den DuoCore2 Prozessor, weil auf allen 32bit CPUs läuft das normal.

_________________
ist Ihnen schon mal aufgefallen, dass wenn Sie beim Wort Schlagersängerinnen die ersten 6 Buchstaben streichen, das 'e' durch ein 'f' ersetzen, die nächsten 7 Buchstaben rückwärts lesen und dann ebenfalls elemenieren und zusätzlich die beiden nebeneinanderstehenden n's durch ck ersetzen, das Wort 'ficken' ergibt?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 19, 2007 18:14 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Der Zerhackte hat geschrieben:
So ich lass die fps nun als Texture-Text im Orthomodus beim Rendern anzeigen, der Effekt bleibt der gleiche. Ich übergebe der Form nu gar nichts mehr, würde mich also wundern, wenn die jetzt refresh, oder so machen würde. Also es ist immer noch so, ich habe im Schnitt 60-61 fps, wenn ich die Maus nu über der Form lasse, bleibt der fps counter stehen und wenn ich, dann, nach meinetwegen 3 sekunden, wieder runter gehe von der Form, springt die fps spontan auf ca.240 und liegt mit der nächsten sekunde wieder bei ca.60.
An sich nicht wirklich schlimm, aber Bewegungen, die fps abhängig sind (was wohl alle sein sollten) bleiben dann stehen, sobald die Maus auf der Form ist. Geht die maus wieder runter, bewegt sich alles in einem schnecken Tempo, weil die fps ja nu 4mal höher sind, als sie wirklich sind und die zurückgelegte Strecke viel kleiner wird als sie sein müsst.

Warum es passiert kann ich mir absolut nicht erklären.. Momantan tippe ich auf den DuoCore2 Prozessor, weil auf allen 32bit CPUs läuft das normal.


Du solltest keine Bewegung von den FPS abhängig machen! Schau dir lieber mal die Funktion GetTickCount an. Du legst für alle Bewegungen eine Geschwindigkeit pro Sekunde fest. Dann rechnest du die Zeit vom letzten Rendern bis zum aktuellen aus, z.B. so:

Code:
  1.  
  2. type
  3.   Tform1 = class (TForm)
  4.     [..]
  5.   private
  6.     FLastUpdate: Cardinal;
  7.     [..]
  8.   end;
  9.  
  10. [..]
  11.  
  12. procedure Render;
  13. var
  14.   Interval: Single;
  15.   CurrentUpdate: Cardinal;
  16. begin
  17.   CurrentUpdate := GetTickCount;
  18.   Interval := (CurrentUpdate - FLastUpdate) / 1000;  // Errechnet die vergangene Zeit in Sekunden
  19.   FLastUpdate := CurrentUpdate;
  20.  
  21.   [..]
  22. end;
  23.  


Wichtig ist aber, dass du beim Start einmal FLastUpdate mit GetTickCount initialisierst, sonst kommt es zu interessanten nebenwirkungen im ersten Frame.

Den Interval-Wert kannst du jetzt dazu verwenden, alle Bewegungen mit ihm zu Multiplizieren. Wenn du jetzt also ein Objekt hast, was sich pro sekunde um 4 Einheiten auf der X-Achse bewegen soll, dann multiplizierst du beim Rendern die Geschwindigkeit (also 4) mit Interval und dann berechnest du damit die Bewegung. Das Prinzip ist Simpel, die wirkung ist massiv. So wird die Anwendung auch auf älteren Rechnern mit der gleichen geschwindigkeit laufen.

//Edit:
GetTickCount ist nicht die genauste Funktion. Es gibt auch noch die möglichkeit, einen bestimmten hardwaretimer abzufragen, der noch genauer ist als GetTickCount. Leider ist mir die Funktion entfallen und falls du irgendwann mit SDL arbeitest, wirst du sowieso auf SDL_GetTicks zurückgreifen müssen.

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 19, 2007 18:47 
Offline
DGL Member

Registriert: Fr Nov 18, 2005 00:44
Beiträge: 57
jo, sag ich mal dankeschön, Bewegung lässt sich jetzt problemlos realisieren, dank deiner Lösung. Dein Lösungsansatz war dem fps counter im Idlehandler sehr nahe, nur das dieser halt wirklich die fps ausgab und nicht das Zeitintervall zum Zeichnen, was ja ansich noch viel besser ist, da ich dann nicht die bewegung/fps rechnen muss (kein division by 0 mehr), sondern einfach multipliziere.

nochmal danke schön!

_________________
ist Ihnen schon mal aufgefallen, dass wenn Sie beim Wort Schlagersängerinnen die ersten 6 Buchstaben streichen, das 'e' durch ein 'f' ersetzen, die nächsten 7 Buchstaben rückwärts lesen und dann ebenfalls elemenieren und zusätzlich die beiden nebeneinanderstehenden n's durch ck ersetzen, das Wort 'ficken' ergibt?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 19, 2007 19:28 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Hab doch gerne geholfen.

Ich erinnere mich noch an mein erstes grafisches Spiel mit Delphi... Man musste in den optionen einen SpeedFactor einstellen, damit das Spiel auf dem Rechner spielbar war :wink:. Damals kannte ich die beste deutsche OpenGL Community noch nicht, die mir diese und noch einige weitere Techniken nahe gelegt hat. :wink:

//Edit:
Ich hoffe, dass du schonmal nen Blick ins Wiki von DelphiGL geworfen hast, es lohnt sich, vorallem wegen den Tutorials.

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.026s | 15 Queries | GZIP : On ]