2016-07-13 19 views
7

Używam nowego Qt 3D API do wyświetlania sceny 3D podczas obliczeniowych obliczeń intensywnych. Ta scena zmienia się tylko w odpowiedzi na dane wprowadzone przez użytkownika. Jednak domyślne zachowanie Qt 3D wydaje się blokować szybkość klatek sceny do pewnej wysokiej wartości stałej, która w tym przypadku pochłania niedopuszczalną ilość zasobów.Jak mogę kontrolować liczbę klatek na sekundę w Qt 3D?

Czy istnieje sposób kontrolowania liczby klatek na sekundę w Qt 3D? Idealnie, chciałbym renderować tylko nową klatkę po wprowadzeniu zmian w scenie, ale wystarczyłoby też obniżenie jej do mniejszej stałej wartości. Dokumentacja Qt 3D jest skąpa i nie udało mi się znaleźć sposobu na wykonanie którejkolwiek z tych rzeczy.

Edit: Udało mi się znaleźć i zastosować QRenderSettings::OnDemand do mojego węzła głównego i wykres ramka, ale pozornie nie ma wpływu, choć this Oznacza to, że powinien, jak używam Qt 5.7. Wszelkie dodatkowe informacje na ten temat byłyby bardzo mile widziane (nawet jeśli uzasadnia to tylko komentarz).

Edycja 2: Po zainstalowaniu Fraps i bezpośrednim pomiarze częstości klatek, wygląda na to, że scena jest renderowaniem ramek tylko wtedy, gdy jest to wymagane w aplikacji QRenderSettings :: OnDemand. Bez tego liczba klatek na sekundę utrzymuje się na stałym poziomie 60 klatek na sekundę, co jest częstością odświeżania mojego ekranu. Jednak program nadal zużywa dużą ilość czasu procesora podczas pracy na biegu jałowym z włączoną obsługą Qt 3D, niezależnie od tego, czy okno 3D jest wyświetlane. Zaczynam myśleć, że to oddzielny problem z Qt 3D niezwiązany z liczbą klatek na sekundę i prawdopodobnie otworzy to nowe pytanie.

+0

Czy jesteś pewien, że nie ma to nic wspólnego z twoją grafiką? –

+1

Przy jakim fps działa i jaki byłby najwyższy fps dla twoich preferencji? –

+0

To może być warte obejrzenia. Prawdopodobnie to nie rozwiąże, ale może rzucić trochę światła na problem. http://stackoverflow.com/questions/36181532/qt-qapplication-framerate-drop-when-maximizing-window –

Odpowiedz

2

Najlepszym sposobem na to jest prawdopodobnie użycie klasy FrameRateRange w pliku nagłówkowym <FrameRateRange>. W tej klasie są dwie publiczne funkcje: FrameRateRange() i FrameRateRange(qreal minimumFrameRate, qreal maximumFrameRate). qreal to parametr, który pojawia się w obu parametrach w tej ostatniej funkcji. Jest to globalny kod typedef zadeklarowany w pliku nagłówkowym <QtGlobal>. minimum i maximum to liczba klatek na sekundę w klatkach. Więcej informacji od here i here.

+1

FrameRateRange wydaje się być całkowicie niezwiązanym z Qt 3D, więc nie mogę zaakceptować tej odpowiedzi, ale ponieważ jesteś jedyną osobą, która w ogóle odpowiada, a twoje pytania pomogły mi lepiej zrozumieć problem, prawdopodobnie nagrodzę cię nagrodą . –

Powiązane problemy