View previous topic :: View next topic |
Author |
Message |
S1 Indago dalībnieks
Joined: 31 Jul 2005 Posts: 219 Location: Jelgava
|
Posted: Thu Aug 04, 2005 10:54 am Post subject: frame rate |
|
man ir gadījusies tāda īpatnēja lieta: kad palaižu OpenGL aplikāciju kopā ar windows media player, tad aplikācija skrien 7x ātrāk Kā lai to novērš?
(vai arī readme failā būsjāraksta neslēgt kopā ar wmplayer) |
|
Back to top |
|
|
GiGa Indago Uzvarētājs
Joined: 25 Sep 2003 Posts: 887
|
Posted: Thu Aug 04, 2005 11:25 am Post subject: |
|
kaadaa veidaa tu regulee savas progas darbiibas aatrumu? ierobezo freimreitu, vai skaties kopsh ieprieksheejaa kadra pagaajusho laiku un regulee objektu kustiibas aatrumu? _________________
|
|
Back to top |
|
|
S1 Indago dalībnieks
Joined: 31 Jul 2005 Posts: 219 Location: Jelgava
|
Posted: Thu Aug 04, 2005 6:01 pm Post subject: |
|
kā es to regulēju? Grūti pateikt... Es izmantoju delphi taimeru un intervāls ir 1 ms. |
|
Back to top |
|
|
GiGa Indago Uzvarētājs
Joined: 25 Sep 2003 Posts: 887
|
Posted: Thu Aug 04, 2005 6:04 pm Post subject: |
|
Tu paarziimee sceenu un izpildi speeles logjiku uz katru taimera eventu, un intervaals ir 1ms? _________________
|
|
Back to top |
|
|
S1 Indago dalībnieks
Joined: 31 Jul 2005 Posts: 219 Location: Jelgava
|
Posted: Thu Aug 04, 2005 6:15 pm Post subject: |
|
1 ms!! nē taču. Taimera opcijās esmu uzlicis 1ms. (TDXTimer komponente). Normāli ir, ja aplikācija iet uz 100fps, paliažot kopā ar wmplayer - 700fps. |
|
Back to top |
|
|
GiGa Indago Uzvarētājs
Joined: 25 Sep 2003 Posts: 887
|
Posted: Thu Aug 04, 2005 6:20 pm Post subject: |
|
Nu tad tieshi te arii ir Tava probleema, es gan briinos, kaapeec ar WMedia player paatrinaas framerate... bet probleema ir taada, ka Tu paljaujies uz to, ka buus noteikts fps. Savu speeles logjiku izpildi nevis ar taimeri ar intervaalu 1ms, bet gan 0ms, vai veel labaak uz Idle eventu, ja taads tur pieejams. Un katru reizi paskaties cik milisekundes pagaajushas no ieprieksheejaa kadra, un tad dari taa: ja objektam jaakustas ar 100 vieniibaam sekundee, tad paarvietojumu shim kadram reekjini 100*pagaajushaas_milisekundes/1000 (aatrums_sekunee*pagaajushaas_milisekundes/1000). Tad vienalga pie kaada fps viss kusteesies pareizaa atrumaa. _________________
|
|
Back to top |
|
|
S1 Indago dalībnieks
Joined: 31 Jul 2005 Posts: 219 Location: Jelgava
|
Posted: Thu Aug 04, 2005 8:08 pm Post subject: |
|
taimera opcijā ieliku 10ms, izskatās, ka strādā. enivei paldies.Ja šis vēlāk nestrādās, izmantošu tavu formulu. |
|
Back to top |
|
|
GiGa Indago Uzvarētājs
Joined: 25 Sep 2003 Posts: 887
|
Posted: Thu Aug 04, 2005 8:23 pm Post subject: |
|
Nu kaa gribi, bet paljauties uz noteiktu fps un lietot konstantus update aatrumus lielaakai daljai speelju ir ljoti nepareizi. Es gan nezinu par Tavu konkreeto gadiijumu - varbuut taadam speeles zanram tas nemaz nemaisa _________________
|
|
Back to top |
|
|
anggelus
Joined: 23 Feb 2005 Posts: 383 Location: Rīga (LV)
|
Posted: Fri Aug 05, 2005 8:54 pm Post subject: |
|
Kā ieslēdz MediaPlayer renderēšana notiek lēnāk nekā parasti, te nu arī rodās problēma ar taimeri.
Pieņemsim, ka tev uz katru taimera eventu tiek izsaukta funkcija draw(), ja nav ieslēgts MediaPlayer, tad draw() paspēj norenderēt visu kadru tajā 1ms intervālā, bet kā ieslēdz WMplayer, tā jau sākās problēmas, jo kamēr kadrs vēl nav līdz galam pārzīmēts, draw() tiek izsaukta vēlreiz, kamēr vēl notiek iepriekšējā kadra renderēšana. Ar to arī izskaidrojams kāpēc framerate pieauga ieslēdzot WMpayer.
Vislabāk izmantot GiGas ieteikto metodi, jo izmantojot OGL vai D3D nākamā kadra zīmēšana pirms iepriekšējais ir pabeigts var novest pie vizuāliem efektiem-defektiem, no kuriem visjaukākais ir windas zilais ekrāns, ja trāpījušies pašvaki videokartes draiveri. _________________ No comprendo lo que dice. |
|
Back to top |
|
|
gazz
Joined: 03 Jan 2004 Posts: 355 Location: Teika
|
Posted: Sun Aug 07, 2005 8:14 pm Post subject: |
|
faktiski jau neesu redzeejis ka izmanto multi-threading ieksh rendereeshanas taa ka funkcija netiks izsaukta divreiz jo windows noprocesees vienu messagi un tikai tad kjersies pie naakamaas. |
|
Back to top |
|
|
GiGa Indago Uzvarētājs
Joined: 25 Sep 2003 Posts: 887
|
Posted: Sun Aug 07, 2005 8:25 pm Post subject: |
|
Es arii taa domaaju, liidz dabuuju neizskaidrojamus errorus no wxWidgets uz timer eventa izsauktā koda. Nācās eventa sākumā stopēt taimeri un beigās atkal palaist. Par šo konkrēto situāciju nezinu, bet fakts ka tādas lietas virpār notiek un tiek uzskatītas par "pareizām" _________________
|
|
Back to top |
|
|
S1 Indago dalībnieks
Joined: 31 Jul 2005 Posts: 219 Location: Jelgava
|
Posted: Wed Aug 24, 2005 9:45 pm Post subject: |
|
labi, laikam būs jāuztaisa, lai spēles ātrums nebūtu atkarīgs no FPS
Tad pirmais laikam ir jāuzņem laiks, ja
Code: |
procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
time1 := getTickCount;
//renderēšana un citas lietas
time2 := getTickCount - time1;
end;
|
nesaprotu, time2 uzrādās kā 0 ??? Tas nav iespējams, kur te ir kļūda?
Baigais besis... |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Wed Aug 24, 2005 10:03 pm Post subject: |
|
Kas tas par getTickCount mainīgo?
(uz taimeri nav labi renderēt, labāk idle loopā) |
|
Back to top |
|
|
S1 Indago dalībnieks
Joined: 31 Jul 2005 Posts: 219 Location: Jelgava
|
Posted: Wed Aug 24, 2005 10:10 pm Post subject: |
|
getTickCount ? Tā ir windows f-ja it kā skaita ms. Es izdomāju savādāk, uzliku 2 taimeru vienu uz 0(vai tas ir idle?) un otru uz 1000ms.
Code: |
//0ms
procedure TForm1.DXTimer1Timer(Sender: TObject; LagCount: Integer);
begin
renderēšana un citas lietas
inc(CountFPS);
end;
//1000ms
procedure TForm1.Timer1Timer(Sender: TObject);
begin
rezFPS := CountFPS;
CountFPS := 0;
end;
end; |
Nu tā, tagad rādās FPS(>700), hm. Kā ar to viltīgo sistēmu, lai tā spēle ietu nemainīgā ātrumā??? |
|
Back to top |
|
|
bubu Indago Uzvarētājs
Joined: 23 Mar 2004 Posts: 3223 Location: Riga
|
Posted: Wed Aug 24, 2005 11:17 pm Post subject: |
|
Fukcijas izsaukums jau pierakstās šādi: getTickCount(), vismaz paskālā. Bet mainīgā ierakstīšana/nolasīšana: getTickCount.
Pievērs uzmanību iekavām.
Nē tā arī nav labi (ar diviem taimeriem). Paskaties Delphi helpā par onidle eventu. |
|
Back to top |
|
|
|