JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=9d9c53fa35e3174b5d059c02879fe49aMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

framerate

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Erni
Junior JLI'ler



Anmeldedatum: 29.10.2003
Beiträge: 54

Medaillen: Keine

BeitragVerfasst am: 01.11.2003, 14:48    Titel: framerate Antworten mit Zitat

Hi,
hab eine Frage zum 2. Buch Kapitel 22 Frames. Ich hab eine Framerate von 75, hab die Move methode der sprite klasse angepasst (m_vPosition.x -= m_speedX / frameRate), wobei m_speedX 10.0f ist.
Auf den ersten Blick und gestützt auf meine grandiosen Mathekenntnisse würde ich sagen,dieses Schiff ist saulangsam. Stimmt sogar Laughing . Jetzt wunder ich mich, im Beispielcode von Kap22 steht ebenfalls 10.0f, und im Demo desselben Themas bewegt sich das Schiff aber mindestens doppelt so schnell. Also, mache ich was falsch, oder wurde im Demo eine andere Geschwindigkeit als im Quellcode gewählt? Ich erreiche dieselbe Geschwindigkeit wie im Demo, wenn ich die speed auf 500 setze Shocked
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Erni
Junior JLI'ler



Anmeldedatum: 29.10.2003
Beiträge: 54

Medaillen: Keine

BeitragVerfasst am: 01.11.2003, 17:50    Titel: Antworten mit Zitat

noch ein kleines prob, ich wollte die framerate auf 60 festlegen und hab dafür folgendes gemacht:

Code:

//im game loop
QueryPerformanceCounter((LARGE_INTEGER*)&curCount);

//wenn curCount - lastCount > 1s       
if(curCount - lastCount> frequency)
{
     lastCount = curCount;
     g_frameRate = g_frames;
     g_frames    = 0;
}


//wenn curCount grösser ist als Abstand zweier Frames
//erhöhe g_frames um 1, setze nextFrame aufs nächste Frame
if(curCount > nextFrame)
{
     g_frames++;
     nextFrame = curCount + frameDistance;
}



//Initialisierungen vor dem game loop
if(!QueryPerformanceFrequency( (LARGE_INTEGER*)&frequency))
      return 0;


frameDistance = frequency / 60;

QueryPerformanceCounter( (LARGE_INTEGER*)&lastCount);
nextFrame = lastCount + frameDistance;


Bei Test erhalte ich jedoch keine rate von 60 sondern es schwankt zwischen 38 und 39, wobei ab und zu auch auf 36 gesprungen wird, woran liegt das?[/code]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 01.11.2003, 21:26    Titel: Antworten mit Zitat

Wenn die Framerate nicht konstant ist, liegt es wohl daran, dass im System, noch andere Programme aktiv sind(die auch Zeit brauchen).
Oft sinkt auch die Framerate, wenn plötzlich mehr Objekte auf dem Bildschirm sind, also mehr gezeichnet werden muss.
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...


Zuletzt bearbeitet von The Lord of Programming am 17.09.2004, 13:17, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Chris25
Mini JLI'ler



Anmeldedatum: 07.05.2003
Beiträge: 6

Medaillen: Keine

BeitragVerfasst am: 01.11.2003, 22:41    Titel: Antworten mit Zitat

mein Bildschirm ist ganz schwarz, keine objekte , nur Text um die framerate auszugeben. programme hab ich nur ICQ an und hab n 3 ghz rechner. Mich wundert halt dass obwohl ich 60 FPS will(frameDistance = frequency/60), auf dem Bildschirm 39 FPS angezeigt werden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Finnigan
Mini JLI'ler



Anmeldedatum: 16.10.2003
Beiträge: 16
Wohnort: NRW
Medaillen: Keine

BeitragVerfasst am: 02.11.2003, 00:24    Titel: Antworten mit Zitat

So einen Effekt hatte ich auch erst,
bei mir lag das aber daran das ich meine Programme zwecks
debugging erstmal im Fenstermodus und nicht im Vollbild hab
laufen lassen und so die Framerate ein wenig zusammengebrochen ist.
Im Vollbildmodus war dann wieder alles ok.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Erni
Junior JLI'ler



Anmeldedatum: 29.10.2003
Beiträge: 54

Medaillen: Keine

BeitragVerfasst am: 02.11.2003, 00:33    Titel: Antworten mit Zitat

Finnigan hat Folgendes geschrieben:
So einen Effekt hatte ich auch erst,
bei mir lag das aber daran das ich meine Programme zwecks
debugging erstmal im Fenstermodus und nicht im Vollbild hab
laufen lassen und so die Framerate ein wenig zusammengebrochen ist.
Im Vollbildmodus war dann wieder alles ok.


hmm merkwürdig, ich hatte die ganze zeit das programm im fullscreen laufen. Sad Wenn ich die Framerate direkt über eine Sekunde erstell klappt es einwandfrei und ich erhalte 75 fps, aber sobald ich eine ander fps einstelle sinds immer enorm weniger als gewollt .
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
The Lord of Programming
Living Legend


Alter: 37
Anmeldedatum: 14.03.2003
Beiträge: 3122

Medaillen: Keine

BeitragVerfasst am: 02.11.2003, 11:58    Titel: Antworten mit Zitat

Du hast doch sicher auch noch Windows laufen, oder?
Ruf mal den TaskManager auf(STRG+ALT+ENTF) und guck mal, was da alles steht - bei mir steht da zumindest eine ziemlich lange Liste;)
_________________
www.visualgamesentertainment.net
Current projects: RDTDC(1), JLI-Vor-Projekt, Tetris(-Tutorial), JLI-Format
(1) Realtime Developer Testing and Debugging Console


Anschlag, Anleitung zum Atombombenbau, Sprengkörper...
Hilf Schäuble! Damit er auch was findet...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Erni
Junior JLI'ler



Anmeldedatum: 29.10.2003
Beiträge: 54

Medaillen: Keine

BeitragVerfasst am: 02.11.2003, 12:30    Titel: Antworten mit Zitat

The Lord of Programming hat Folgendes geschrieben:
Du hast doch sicher auch noch Windows laufen, oder?
Ruf mal den TaskManager auf(STRG+ALT+ENTF) und guck mal, was da alles steht - bei mir steht da zumindest eine ziemlich lange Liste;)


Sicher da steht so einiges, aber trotzdem passen die Relationen nicht, deswegen glaub ich eher das an meinem code was nicht stimmt.
Wenn ich die Frames pro Sekunde inkrementiere ohne FRAME_RATE limit, erhalte ich immer 75 fps. Setze ich ein Limit von 60 fps erhalte ich 39 fps, fast die Hälfte der 75 fps pro Sekunde, das passt doch irgendwie nicht.
Apropo Programme, wenn ich im Hintergrund noch return to castle wolfenstein und civ3 laufen hätte, würd ich dich ja verstehn Laughing , aber nicht wenn ein paar anwndngen mit max 25k arbeitsspeicher in Betrieb sind bei 1024 mb ddr ram. BTW wenn ich die Anwendung ohne fps limit erstelle, ist die fps sehr stabil bei 75, wobei ab und zu auf 74 gesprungen wird, das aber wirklich selten. Anders siehts bei meinen 39 fps aus, dort geths von 36-40. Ich schnalls net Sad
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 02.11.2003, 22:29    Titel: Antworten mit Zitat

Das ist ganz einfach: Du hast die VSync-Option eingeschaltet. Bei einem Present() wartet der Bildaufbau so lange, bis es einen Vertzikalen Zeilenrücksprung im Monitor gibt. Das hat vor- und Nachteile:
Vorteile: Es werden keine "Halbbilder" angezeigt. Das heisst, wenn der Bildaufbau der Grafikkarte schneller wäre, als die Monitorfrequenz würde im oberen Teil des Bildschirmes noch das alte Bild zu sehen sein, während im unteren Teil bereits eine neuere Version zu sehen ist (Ergibt vorallem bei Horizontalbewegungen einen unschönen Effekt)
Nachteil: Die Bildfrequenz ist immer ein ganzzahliger Teiler der Monitorfrequenz, da der Presentaufruf immer wartet... Also ist die Bildfrequenz Maximal die Monitorfrequenz, oder aber die hälfte davon, ein drittel, ein viertel, ...

Such dir aus, was besser ist.
_________________
CPP:
float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;}
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Erni
Junior JLI'ler



Anmeldedatum: 29.10.2003
Beiträge: 54

Medaillen: Keine

BeitragVerfasst am: 03.11.2003, 00:52    Titel: Antworten mit Zitat

Danke für die Antwort Smile , wo kann man vSync denn ausstellen, hab im sdk gesucht aber leider nichts konkretes dazu gefunden.
Nochmal zu den Bewegungen, wenn ich die Geschwindigkeit von der Framerate abhängig mache und 10.0f /framerate teile, dann bewegt sich das Schiff ja kaum. Aber im code beispiel von Rousselle benutzt er ebenfalls 10.0f bei 75 fps, und das Schiff ist mind 3 fach so schnell, woran liegt das?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum