Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Jul 03, 2025 11:37

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Sa Mär 26, 2011 16:58 
Offline
DGL Member

Registriert: Sa Jun 05, 2010 16:15
Beiträge: 94
Hi,

mir ist aufgefallen, dass das Bild trotz hoher Framerate (40-50) unflüssig wirkt. Ich hab aber gehört, dass alle Animationen, die mit mindestens 25 FPS laufen für das menschliche Auge als flüssig wahrgenommen werden. Bei 60 FPS ist das Bild flüssig. Ich hab DoubleBuffering (von der WinAPI) aktiviert:

Code:
// ...
SwapBuffers(Window->hDC);


Das Pixelformat:
Code:
    static PIXELFORMATDESCRIPTOR pfd = {
        sizeof(PIXELFORMATDESCRIPTOR),
        1, // Versionsnummer
        // Das Format muss in Fenster sichtbar sein können
        PFD_SUPPORT_OPENGL |
        // OpenGL muss unterstützt werden
        PFD_DOUBLEBUFFER,
        // Double Buffering muss unterstützt werden
        PFD_TYPE_RGBA,
        // Das RGBA (Rot,Grün,Blau,Alpha(Transparenz))
        // muss unterstützt werden
        32,
        // Die Farbtiefe, die schon
        // übergeben wurde, wird hier benötigt
        0, 0, 0, 0, 0, 0, // wird nicht benötigt
        0, // kein Alpha Buffer
        0, // Shift Bit ignoriert
        0, // kein Accumulation Buffer
        0, 0, 0, 0, // nicht benötigt
        16, // 16Bit Z-Buffer (Depth Buffer)
        0, // kein Stencil Buffer
        0, // kein Auxiliary Buffer
        PFD_MAIN_PLANE,
        // Die Hauptebene auf die später gezeichnet wird
        0, // unwichtig
        0, 0, 0 // keine Ebenenmasken benötigt
    };


Weiß jemand warum das Bild bei 40 - 50 FPS unflüssig wirkt trotz DoubleBuffering?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Mär 26, 2011 17:14 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Vielleicht ist deine Animation einfach nicht flüssig. Es nutzt nichts Bilder mit 40 fps zu zeigen, wenn die Bewegung nicht dazu passt. Immer die Zeit seit dem letzten Frame messen (*) und die Animation entsprechend animieren. Nicht von einer konstanten Framerate ausgehen!


(*) und zwar mit mehr als 1/1000 Sekunden Auflösung!

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Mär 26, 2011 17:57 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Pk3 hat geschrieben:
mir ist aufgefallen, dass das Bild trotz hoher Framerate (40-50) unflüssig wirkt. Ich hab aber gehört, dass alle Animationen, die mit mindestens 25 FPS laufen für das menschliche Auge als flüssig wahrgenommen werden.

Randnotiz, selbst wenn es für dein konkretes Problem irrelevant ist: Das gilt nur, wenn die Animation Bewegungsunschärfe hat, weil sich dann der gleiche Effekte einstellt, den das Auge auch bei echten Bewegungen hat. Die Frames des Auges ist nämlich anders als die bei OpenGL z.B. keine Momentaufnahmen sondern eine Akkumulation der Photonen, die seit dem letzten Frame aufgetroffen sind. Dadurch ergibt sich bei echten Bewegungen eine Unschärfe in Bewegungsrichtung und damit ein flüssiges Bild. Auch Videos (Kameras funktionieren genauso) mit 25 FPS wirken flüssig. OpenGL oder andere CG-Animationen wirken bei 25 FPS (vorrausgesetzt, es wird keine Bewegungsunschärfe eingesetzt) nicht flüssig. Dazu braucht es dann mehr, z.B. 40 oder 60 FPS.

greetings

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Mär 26, 2011 22:34 
Offline
DGL Member

Registriert: Sa Jun 05, 2010 16:15
Beiträge: 94
Zitat:
(*) und zwar mit mehr als 1/1000 Sekunden Auflösung!


Also die Animation wird an die Framerate angepasst, aber ich verwende eine Auflösung im Millisekundenbereich (mit der Funktion clock()). Müsste ich nach einer Möglichkeit suchen die den Timestamp im Microsekundenbereich ausgibt.

@Lord Horazont
Also erscheint das Bild mit einem Bewegungsunschärfe - Effekt flüssiger? Werd ich mal ausprobieren ;).


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Sa Mär 26, 2011 22:54 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
aber ich verwende eine Auflösung im Millisekundenbereich (mit der Funktion clock()).

Wenn die Einheit Millisekunden ist heißt das noch lange nicht das dies auch die echte Auflösung ist.

=> Stichwort: QueryPerformanceCounter

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: So Mär 27, 2011 02:26 
Offline
DGL Member

Registriert: Fr Okt 03, 2008 13:32
Beiträge: 367
Zu "clock()" hab' ich einen Thread gefunden der das Problem erkärt: Link
Unter Delphi ist es das gleiche Problem mit "GetTickCount".
Dadurch kann es eben passieren das durch eine kleine zeitliche Veränderung der tatsächlichen Framedauer, diese sich scheinbar verdoppelt. Je nachdem wie die Genauigkeit der Funktion ist, kann es gut möglich sein, dass das deutlich sichtbar ist.

Die Lösung dafür nannte Coolcat ja bereits.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 19 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.016s | 15 Queries | GZIP : On ]