.| Autor | Beitrag |
|---|---|
|
000 09.01.2003, 14:31 JP |
All meine OpenGL Sachen wechseln ständig die Geschwindigkeit. Wenn z.B. Winamp läuft hat es die richtige Geschwindigkeit. auch wenns glaub ich ne dumme frage is... Kann mir das einer mal sagen bitte. Danke. --Free your mind and your ass will follow! |
|
Profil || Suche |
|
001 09.01.2003, 15:31 Prefect |
Du willst niedrigere Framerates? Wo gibt's denn sowas... ;) Nein, im ernst: Dein Problem ist wahrscheinlich, daß du Animationen usw. nicht zeitgebunden ablaufen läßt. Wenn du ein Objekt über den Bildschirm bewegst (wie z.B. in Pong den Ball), dann ist die naive Lösung dafür, einmal pro Frame folgenden Code auszuführen:
Da aber ein Frame mal länger und mal kürzer dauert ist das falsch. Du mußt die Dauer eines Frames in die Rechnung mit einbeziehen. In der Praxis sieht das dann in etwa so aus:
cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
002 09.01.2003, 17:13 the_viking |
das prob hat ich auch mal :) thx, cu, MfG the_viking (( My =]=H=O=M=E=> Page! )) |
|
Profil || Suche |
|
003 09.01.2003, 21:35 JP |
@Perfekt: Noch was... Thx JP --Free your mind and your ass will follow! |
|
Profil || Suche |
|
004 09.01.2003, 21:57 Prefect |
wrt SDL_GetTicks: Du brauchst irgendeine Funktion, die dir die Zeit zurückgibt. Transparenz von Texturen: Dazu brauchst du einen Alphakanal, d.h. du mußt die Texturen als GL_RGBA hochladen. Wenn du die Texturen als Bitmaps mit Colorkey vorliegen hast mußt du den Alphachannel bei allen Pixeln mit Colorkey auf 0 setzen, bei allen anderen Pixeln auf 255 (oder 1.0 wenn du mit floats arbeitest). cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
005 10.01.2003, 20:48 JP |
Prefect: Du ziest doch die Variablen "time" und "lastframe" voneinander ab. Sie haben aber doch den selben wert. Dess halb müsste edit: Free your mind and your ass will follow! Dieser Beitrag wurde am 10.01.2003 um 23:48 von JP bearbeitet. |
|
Profil || Suche |
|
006 11.01.2003, 11:50 Mazze |
Nein, wieso? Außer dein Code zwischen den GetTicks() Aufrufen ist sehr klein und die Uhr kommt nicht mit! cu BattleTech-MOD: |
|
Profil || Suche |
|
007 27.01.2003, 16:29 King of Darkness |
das werfe ich jetz mal komentar los ein: http://www.codeworx.org/gamedev_tuts_timing.php sollte das problem lösen mehr oder weniger --Coding Center --- Tutorials über Programmierung und andere Themen |
|
Profil || Suche |
|
008 12.03.2003, 11:05 WareWolf |
passt gerade zum Thema, deshalb kurz ne Zwischenfrage: ich habe Timingprobleme immer so gelöst, dass ich in der Hauptschleife auf ein konstantes Hardwaresignal z.B. auf den Strahlrücklauf des Monitors getriggert habe: Sig as a brick ┴┬┴┬┴┬┴┬┴┬┴┬┴ |
|
Profil || Suche |
|
009 12.03.2003, 11:22 King of Darkness |
uff das klingt aber kompliziert, oder doch nicht ?! nur wie du sagst geht es nur bei vollbild, was, mhhh, ja, nich ganz ordenlich ist, ok wer spielt schon im fenster, aber es soll solche leute geben ;) @perfect ich glaube nicht das das ordendlich ist, es geht zwar aber ich will mal wissen ob man es vieleicht auch einfacher machen kann ? Coding Center --- Tutorials über Programmierung und andere Themen |
|
Profil || Suche |
|
010 12.03.2003, 13:23 Prefect |
WareWolf: Kannst du nicht einfach die momentane Systemzeit auslesen und mit einem Timeout vergleichen? Vielleicht kriegst du ja sogar Zugriff auf den PIT oder den TSC (natürlich nur auf den Prozessoren, die einen TSC haben). King of Darkness: Dein SetThink()-Makro ruft die übergebene Funktion einfach nur auf. Warum schaust du dir nicht einfach mal an, wie das Problem im HL SDK gelöst ist? Hmm, wobei die Lösung im HL SDK nicht gerade sauberstes C++ ist. Da müßte ein ge-templateter static_cast her... cu, Widelands - Gemütliche Aufbaustrategie, Free Software Dieser Beitrag wurde am 12.03.2003 um 13:23 von Prefect bearbeitet. |
|
Profil || Suche |
|
011 12.03.2003, 14:40 WareWolf |
@Prefect: die Systemzeit über Ports auslesen wird zu ähnlichen Problemen führen, da die Ports entweder gesperrt oder nur emuliert sind, aber ich erinnere mich, die Systemzeit in festen Speicherzellen vorzufinden. Allerdings werden diese Speicherzellen nur 18 mal/Sek vom Bios inkrementiert, was als maximale Framerate schon wieder zu langsam wäre...OK, ich werde das mal checken ist zumindest ein guter Ansatz. Sig as a brick ┴┬┴┬┴┬┴┬┴┬┴┬┴ |
|
Profil || Suche |
|
012 12.03.2003, 22:52 Tron |
unter windose QueryPerformanceCounter(), hat normalerweise eine aufloesung von 1.193.180 Hz (standardfrequenzquartz fuer den programmierbaren timer) oder sogar der takt des prozessors, das sollte auch den hoechsten anspruechen genuegen. unter unix, linux ... gibt's sicher aehnliches. und falls du mit OpenGL arbeitest synchronisiert wglSwapBuffers (windose, andere systeme entsprechendes) mit eingeschaltetem vsync (ueber eine OpenGL erweiterung) --'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett |
|
Profil || Suche |
|
013 13.03.2003, 11:52 King of Darkness |
@ perfect das würde ich ja gerne aber ich komme ja nicht zu der lösung im HL sdk (das steht ja nicht direkt im sdk, im sdk wird es nur angewand), ansonsten würde ich ja nich fragen wie genau soll den eigendlich der timer sein reichen denn nicht einfache milisekunden ? unter dem link den ich da oben gepostet habe gibt es 2 arten von timern, für die klickfaulen ;) genaueres unter dem link --Coding Center --- Tutorials über Programmierung und andere Themen |
|
Profil || Suche |
|
014 13.03.2003, 17:04 Prefect |
Oh doch, King of Darkness, das gesamte SetThink()-Handling ist im SDK, du musst nur lange genug suchen. cbase.h war das, wenn ich mich richtig erinnere. Unter *nix verwendet man übrigens gettimeofday(), das dürfte selbst auf den ältesten Rechnern dank PIT eine Auflösung von Mikrosekunden haben. cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
015 14.03.2003, 20:29 the_viking |
man wieso macht ihr es euch so kompliziert....
thx, cu, MfG the_viking (( My =]=H=O=M=E=> Page! )) |
|
Profil || Suche |

