Hallo Forum,
ich muss in einem Programm recht große Bilder animieren (mindestens 800*600 Pixel, möglichst mindestens 25 FPS). Dabei ändert sich im Regelfall bei jedem Animationsschritt jeder einzelne Pixelwert des Bildes, das heißt ich muss wirklich in jedem Schritt jedes Pixel neu malen.
Die Werte für alle Pixel werden ständig neu berechnet und in einem Float-Array abgelegt.
Ich habe bisher zwei Methoden ausprobiert. Zuerst habe ich mit einem QPainter lauter drawPoints() auf die Animationsfläche angewendet. Das war leider viel zu langsam. Dann habe ich versucht, ein QImage anzulegen, in jedem Schritt zu ändern und dann mit dem QPainter auf die Fläche zu klatschen, war damit aber noch nicht erfolgreich.
Was ist die beste Methode für solche Plotaufgaben? Wir bekomme ich meine Pixel am schnellsten geplottet?
Bin dankbar für jeden Hinweis oder Tipp!
Schöne Grüße,
Simon
Animation: Schnelles Plotten?
Re: Animation: Schnelles Plotten?
Bei jedem Animationsschritt, aber wohl kaum 25 mal die Sekunde. Verabschiede Dich also erstmal von dem Gedanken 25 mal pro Sekunde 800 mal 600 Pixel neu malen zu können. Das wären 12 Mio. Operationen, das dauert nun mal.dezibel hat geschrieben:Dabei ändert sich im Regelfall bei jedem Animationsschritt jeder einzelne Pixelwert des Bildes
Wie oft? Werden wirklich alle Pixel neu berechnet und ist das überhaupt schnell genug?dezibel hat geschrieben:Die Werte für alle Pixel werden ständig neu berechnet und in einem Float-Array abgelegt.
Ich würde wirklich nur das neu malen was sich geändert hat. Dazu hast Du dann zwar einen Vergleich drin, aber das wird allemal schneller als jedes Mal alle Pixel neu zu malen.dezibel hat geschrieben:Was ist die beste Methode für solche Plotaufgaben? Wir bekomme ich meine Pixel am schnellsten geplottet?
Re: Animation: Schnelles Plotten?
Du solltest auf jeden Fall dafür die Bilder in ein QGLWidget packen und anschließend mit der OpenGL-Engine rendern.dezibel hat geschrieben:Hallo Forum,
[..cut..]
Was ist die beste Methode für solche Plotaufgaben? Wir bekomme ich meine Pixel am schnellsten geplottet?
Bin dankbar für jeden Hinweis oder Tipp!
Schöne Grüße,
Simon
Wie bereits erwähnt wurde, würde ich zum anderen versuchen, nur die Pixel rendern, die sich wirklich geändert haben, um damit jedesmal ein paar Rechentakte zu sparen.
Darüberhinaus würde ich mich auch mal mit den Themen "Stencil-Buffer, Display-Lists, Vertex-Arrays & Co." in Zusammenhang mit OpenGL beschäftigen.
Vielleicht kannst Du damit bei Deiner Anwendung , die ich nicht ansatzweise kenne, einiges an Rechenzeit einsparen. Insbesondere Vertex-Arrays können einem einen Performance-Zuwachs von locker 33% und mehr verschaffen. Zudem bietet QT hervorragende Möglichkeiten, direkt mit der OpenGL-Engine zu interagieren.
Dankeschön
Hallo nochmal,
vielen Dank für eure Antworten, das hilft mir schonmal weiter. 25 FPS bei 800x600 Pixeln wären die ultimative Wunschvorstellung, im Moment bin ich auch mit 400x400 Pixeln zufrieden, das hat mit der CImg Library auch gut geklappt. Jetzt soll eben das ganze Programm auf QT "umgestellt" werden.
QGLWidgets wollte ich auch schon ausprobieren... Ich denke das werde ich nun auch umsetzen.
Dankeschön,
Simon
vielen Dank für eure Antworten, das hilft mir schonmal weiter. 25 FPS bei 800x600 Pixeln wären die ultimative Wunschvorstellung, im Moment bin ich auch mit 400x400 Pixeln zufrieden, das hat mit der CImg Library auch gut geklappt. Jetzt soll eben das ganze Programm auf QT "umgestellt" werden.
QGLWidgets wollte ich auch schon ausprobieren... Ich denke das werde ich nun auch umsetzen.
Dankeschön,
Simon