2016-07-13 20 views
7

Ich verwende die neue Qt 3D API, um während einer rechenintensiven Berechnung eine 3D-Szene anzuzeigen. Diese Szene ändert sich nur als Reaktion auf Benutzereingaben. Das Standardverhalten von Qt 3D scheint jedoch die Bildrate der Szene auf einen hohen konstanten Wert zu begrenzen, was in diesem Fall eine inakzeptable Menge an Ressourcen verbraucht.Wie kann ich die Bildrate in Qt 3D steuern?

Gibt es eine Möglichkeit, die Bildrate in Qt 3D zu steuern? Im Idealfall möchte ich nur einen neuen Frame rendern, wenn Änderungen an der Szene vorgenommen werden, aber es würde auch ausreichen, sie auf einen kleineren festen Wert zu reduzieren. Die Qt 3D-Dokumentation ist spärlich, und ich konnte keine Möglichkeit finden, eines dieser Dinge zu tun.

Edit: Ich habe gefunden und anwenden QRenderSettings::OnDemand zu meinem Wurzelknoten und Frame-Grafik, aber es hat scheinbar keinen Effekt, obwohl this impliziert, dass es sollte, da ich Qt 5,7 verwende. Jede zusätzliche Eingabe wäre sehr willkommen (auch wenn es nur einen Kommentar rechtfertigt).

Edit 2: Nach der Installation Fraps und Messung der Bildrate direkt, scheint es, dass die Szene in Wirklichkeit Frame nur bei Bedarf mit QRenderSettings :: OnDemand angewendet wird. Ohne dies bleibt die Bildrate konstant bei 60 fps, was der Bildwiederholrate meines Bildschirms entspricht. Wie auch immer, verbraucht das Programm weiterhin viel CPU-Zeit im Leerlauf, wenn Qt 3D aktiviert ist, unabhängig davon, ob das 3D-Fenster überhaupt angezeigt wird. Ich fange an zu denken, dass dies ein getrenntes Qt 3D-Problem ist, das nicht mit der Bildrate zusammenhängt, und wird wahrscheinlich eine neue Frage entsprechend öffnen.

+0

Sind Sie sicher, dass es nicht mit Ihren Grafiken zu tun hat? –

+1

Mit welchen fps läuft es und was wären die höchsten fps für deine Präferenz? –

+0

Dies könnte einen Blick wert sein. Es wird es wahrscheinlich nicht lösen, aber es könnte etwas Licht auf das Problem werfen. http://stackoverflow.com/questions/36181532/qt-qapplication-framerate-drop-when-maximizing-window –

Antwort

2

Der beste Weg, dies zu tun, ist wahrscheinlich, die Klasse FrameRateRange in der Header-Datei <FrameRateRange> zu verwenden. In dieser Klasse gibt es zwei öffentliche Funktionen: FrameRateRange() und FrameRateRange(qreal minimumFrameRate, qreal maximumFrameRate). qreal ist der Parameter, der in beiden Parametern in der letzteren Funktion erscheint. Dies ist eine globale typedef in der Header-Datei <QtGlobal> deklariert. minimum und maximum sind Bildraten in Bildern pro Sekunde. Weitere Informationen erhalten Sie unter here und here.

+1

FrameRateRange scheint völlig unabhängig von Qt 3D zu sein, deshalb kann ich diese Antwort nicht akzeptieren, aber da du der einzige bist, der überhaupt antwortet und deine Frage mir geholfen hat, mehr über das Problem zu erfahren, werde ich dir wahrscheinlich das Kopfgeld geben . –