Fullscreenanomalie

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Hmm das komische ist, eigentlich sollte das die Physikengine übernehmen mit dem Timing (Zumindest tut sie das bei MoveEntity). MoveEntity ist auch überall gleich schnell bei angeschaltener Physik, warum also nicht RotateEntity?

(¬(MoveEntity <=> RotateEntity)) => (¬RotateEntity)
?!
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Skiller
Beiträge: 151
Registriert: 04.02.2005 22:26

Beitrag von Skiller »

eben, eben.
Habs gerade mit meinem HP-Lap:Intel® Core™ 2 Duo Prozessor P8600, 2.40 GHz, 4096 MB, NVIDIA GeForce 9300M GT getestet. Ging ab wie Sau.

Y = 1: RotateEntity(0, 0, Y, 0, #PB_Relative)

Da müsste ich ja jetzt den Modus Abfragen, um XYZ mit einem Faktor für den Screenmodus runterzubremsen. ...und das auch noch für jeden Rechner. Sorry, aber da stimmt was nicht, denn im Windowed-Modus ist er bei beiden Rechnern gleich schnell!! /:->
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Skiller hat geschrieben:Da müsste ich ja jetzt den Modus Abfragen, um XYZ mit einem Faktor für den Screenmodus runterzubremsen. ...und das auch noch für jeden Rechner. Sorry, aber da stimmt was nicht, denn im Windowed-Modus ist er bei beiden Rechnern gleich schnell!! /:->
Das hat mit dem Windowed-Modus nix zu tun. Beim Windowed-Modus wird deine Framerate auf deine Monitorfrequenz begrenzt (+ ettliche Berechnungen, dann wirds noch ein Stück langsamer). Beim Fullscreen-Modus nicht.

Desshalb sollte man immer mit Timebased Movement arbeiten (Normalerweise müsstest du das sogar tun, nicht PureBasic).

Da das ganze aber in MoveEntity schon Timebased ist (Wegen der Physikengine) frage ich mich ob es nicht auch besser wäre, es in RotateEntity gleich einzubetten (Sonst kommt man durcheinander und hat keine perfekte Abstimmung zwischen MoveEntity und RotateEntity).
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Skiller
Beiträge: 151
Registriert: 04.02.2005 22:26

Beitrag von Skiller »

Hi Darkdragon,

danke für deinen Hinweis.
Desshalb sollte man immer mit Timebased Movement arbeiten (Normalerweise müsstest du das sogar tun, nicht PureBasic).
Sorry leider keine Zuordnung für Timebased :oops: Hat das was mit der Abfrage der Framerate zu tun? Wie wärs mit einem kurzen Beispiel in Anlehnung an: RotateEntity(0, 0, Y, 0, #PB_Relative) ? :praise: Gruß Skiller
Skiller
Beiträge: 151
Registriert: 04.02.2005 22:26

Beitrag von Skiller »

ok, ok man hätte ja mal gugln oder hier suchen können. Habe ich hiermit getan und auch soweit kapiert. Dennoch bleibt eines unklar: In älteren PB-Versionen gibt es keine Geschwindigkeitsuntersch. Somit war ich mit diesem "Timebased Movement" auch noch nicht konfrontiert. Um diesen Thread ordnungsgemäß abzuschliessen wäre es gut, wenn dieser PB-Unterschied geklärt werden könnte. Wenn es nämlich nur ein PB-Fehler wäre - und PB den TM intern schon vorher übernommen hat, könnte man sich einen eigenen TM sparen ohne nun alles überarbeiten zu müssen. Gruß Skiller
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

Der Unterschied ist folgender: In dem neuen PureBasic wird DirectX9 für die 3DEngine verwendet, bei der alten hat man noch versucht es DirectX7 kompatibel zu halten. Und beim DirectX9 Subsystem ist noch ein kleiner Fehler drin, dass im Fullscreenmodus immer VSync ausgeschaltet wird (Das hat mit der Tatsache, dass du Timebased Movement anwenden sollst allerdings nichts zu tun, denn selbst wenn VSync angeschaltet ist und du deine Anwendung auf einem schlechten System ausprobierst wird es bei dir sehr sehr langsam).
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Skiller
Beiträge: 151
Registriert: 04.02.2005 22:26

Beitrag von Skiller »

Danke DarkDragon!!!
Antworten