|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Erni Junior JLI'ler
Anmeldedatum: 29.10.2003 Beiträge: 54
Medaillen: Keine
|
Verfasst am: 01.11.2003, 14:48 Titel: framerate |
|
|
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 . 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 |
|
Nach oben |
|
|
Erni Junior JLI'ler
Anmeldedatum: 29.10.2003 Beiträge: 54
Medaillen: Keine
|
Verfasst am: 01.11.2003, 17:50 Titel: |
|
|
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 |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 01.11.2003, 21:26 Titel: |
|
|
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 |
|
|
Chris25 Mini JLI'ler
Anmeldedatum: 07.05.2003 Beiträge: 6
Medaillen: Keine
|
Verfasst am: 01.11.2003, 22:41 Titel: |
|
|
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 |
|
|
Finnigan Mini JLI'ler
Anmeldedatum: 16.10.2003 Beiträge: 16 Wohnort: NRW Medaillen: Keine
|
Verfasst am: 02.11.2003, 00:24 Titel: |
|
|
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 |
|
|
Erni Junior JLI'ler
Anmeldedatum: 29.10.2003 Beiträge: 54
Medaillen: Keine
|
Verfasst am: 02.11.2003, 00:33 Titel: |
|
|
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. 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 |
|
|
The Lord of Programming Living Legend
Alter: 37 Anmeldedatum: 14.03.2003 Beiträge: 3122
Medaillen: Keine
|
Verfasst am: 02.11.2003, 11:58 Titel: |
|
|
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 |
|
|
Erni Junior JLI'ler
Anmeldedatum: 29.10.2003 Beiträge: 54
Medaillen: Keine
|
Verfasst am: 02.11.2003, 12:30 Titel: |
|
|
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 , 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 |
|
Nach oben |
|
|
AFE-GmdG JLI MVP
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 02.11.2003, 22:29 Titel: |
|
|
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 |
|
|
Erni Junior JLI'ler
Anmeldedatum: 29.10.2003 Beiträge: 54
Medaillen: Keine
|
Verfasst am: 03.11.2003, 00:52 Titel: |
|
|
Danke für die Antwort , 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 |
|
|
|
|
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
|