2016-07-13 67 views
7

Sto utilizzando il nuovo Qt 3D API per visualizzare una scena 3D durante un calcolo intensamente computazionale. Questa scena cambia solo come risposta all'input dell'utente. Tuttavia, il comportamento predefinito di Qt 3D sembra bloccare la frequenza dei fotogrammi della scena a un valore costante elevato, che in questo caso consuma una quantità inaccettabile di risorse.Come posso controllare il frame rate in Qt 3D?

C'è un modo per controllare il frame rate in Qt 3D? Idealmente, mi piacerebbe solo eseguire il rendering di un nuovo fotogramma quando vengono apportate modifiche alla scena, ma sarebbe anche sufficiente ridurlo a un valore fisso più piccolo. La documentazione Qt 3D è scarsa e non sono riuscito a trovare un modo per fare nessuna di queste cose.

Edit: sono riuscito a trovare e applicare QRenderSettings::OnDemand al mio nodo principale e grafico telaio, ma non ha apparentemente alcun effetto, anche se this implica che dovrebbe, come sto usando Qt 5.7. Qualsiasi input aggiuntivo su questo sarebbe molto gradito (anche se merita un commento).

Modifica 2: Dopo aver installato Fraps e misurato direttamente la frequenza fotogrammi, sembra che la scena stia, di fatto, rendendo i fotogrammi solo se necessario con QRenderSettings :: OnDemand applicato. Senza questo, il frame rate rimane a 60fps costanti, il che è il tasso di aggiornamento del mio schermo. Tuttavia il, il programma continua a consumare una grande quantità di tempo di CPU mentre è inattivo con Qt 3D abilitato, indipendentemente dal fatto che la finestra 3D venga visualizzata. Sto iniziando a pensare che si tratti di un problema Qt 3D non correlato al frame rate e probabilmente apriremo una nuova domanda di conseguenza.

+0

Sei sicuro che non abbia qualcosa a che fare con la tua grafica? –

+1

A che fps è in esecuzione e quale sarebbe il più alto fps per le tue preferenze? –

+0

Questo potrebbe valere la pena dare un'occhiata. Probabilmente non lo risolverà, ma potrebbe far luce sul problema. http://stackoverflow.com/questions/36181532/qt-qapplication-framerate-drop-when-maximizing-window –

risposta

2

Il modo migliore per farlo è probabilmente utilizzare la classe FrameRateRange nel file di intestazione <FrameRateRange>. Esistono due funzioni pubbliche in questa classe: FrameRateRange() e FrameRateRange(qreal minimumFrameRate, qreal maximumFrameRate). qreal è il parametro visualizzato in entrambi i parametri nell'ultima funzione. Questo è un typedef globale dichiarato nel file di intestazione <QtGlobal>. minimum e maximum sono frame rate in frame al secondo. Ulteriori informazioni da here e here.

+1

FrameRateRange sembra completamente non correlato a Qt 3D, quindi non posso accettare questa risposta, ma dal momento che tu sei l'unico a rispondere e le tue domande mi hanno aiutato a capire di più sul problema, probabilmente ti assegnerò la taglia a breve . –