Wie wartet man bis QGLWidget komplett sichtbar ist
Verfasst: 23. September 2008 09:26
Hallo an alle!
Ich suche nach einer einfachen Möglichkeit zu warten bis ein QGLWidget komplett sichtbar bzw. aktualisiert ist, um dann den framebuffer auslesen zu können.
Kurz zum Hintergrund: Ich möchte ein Mehr-Kamera-System mit simulieren.
Dazu habe ich eine (relativ einfache) statische 3D-Szene, die in meiner von QGLWidget abgeleiteten GLCam-Klasse kodiert ist. Jede Instanz von GLCam repräsentiert eine andere "virtuelle" Kamera, also anderer Standort bezügl. der Szene, andere Kameraparameter (wie z.B.Sensorgröße, Auflösung, Objektiv mit verschiedenen Brennweiten,Linsenverzeichnungsparametern usw.). Meine Anwendung braucht nun von jeder virtuellen Kamera eine Aufnahme. Mein Ansatz bisher:
for(int i=0; i<AnzKameras; ++i){
virtuelleKamera.raise();
virtuelleKamera.repaint();
/*
wünschenswert wäre so etwas wie die folgende Funktion
virtuelleKamera.ensureVisiblity();
*/
virtuelleKamera.grabFrameBuffer().save(QString("Bild_%i.png").arg(i));
}
funktioniert leider nicht, da anscheinend meine GLCam-Instanzen nicht mit dem Rendern der Szene hinterherkommen und die gespeicherten Bilder leer bleiben. activateWindow() oder show() von QGLWidget helfen leider auch nicht. Hat jemand ne Idee wie ich sowas einfach hinbekomme? Bzw. gibt es schon eine Funktion wie die oben im Kommentar stehende Funktion?
Vielen Dank schonmal und Grüße
DGray
Ich suche nach einer einfachen Möglichkeit zu warten bis ein QGLWidget komplett sichtbar bzw. aktualisiert ist, um dann den framebuffer auslesen zu können.
Kurz zum Hintergrund: Ich möchte ein Mehr-Kamera-System mit simulieren.
Dazu habe ich eine (relativ einfache) statische 3D-Szene, die in meiner von QGLWidget abgeleiteten GLCam-Klasse kodiert ist. Jede Instanz von GLCam repräsentiert eine andere "virtuelle" Kamera, also anderer Standort bezügl. der Szene, andere Kameraparameter (wie z.B.Sensorgröße, Auflösung, Objektiv mit verschiedenen Brennweiten,Linsenverzeichnungsparametern usw.). Meine Anwendung braucht nun von jeder virtuellen Kamera eine Aufnahme. Mein Ansatz bisher:
for(int i=0; i<AnzKameras; ++i){
virtuelleKamera.raise();
virtuelleKamera.repaint();
/*
wünschenswert wäre so etwas wie die folgende Funktion
virtuelleKamera.ensureVisiblity();
*/
virtuelleKamera.grabFrameBuffer().save(QString("Bild_%i.png").arg(i));
}
funktioniert leider nicht, da anscheinend meine GLCam-Instanzen nicht mit dem Rendern der Szene hinterherkommen und die gespeicherten Bilder leer bleiben. activateWindow() oder show() von QGLWidget helfen leider auch nicht. Hat jemand ne Idee wie ich sowas einfach hinbekomme? Bzw. gibt es schon eine Funktion wie die oben im Kommentar stehende Funktion?
Vielen Dank schonmal und Grüße
DGray