2

私は、プロジェクトで OpenGL を使用する目的で、OpenGLに関するQt Quarterly の記事を研究しています。QGraphicsSceneQt の万能な卓越性を考慮して、私はすでに Qt を使用することを決定しましたが、 から派生したクラスを実装する道をたどりましたQGLWidgetが、それでも UI 要素を実装する必要があります。引用された記事のテクニックを使用すると、UI にも Qt ウィジェットを使用して、プログラムを Qt のみに依存させることができます (CEGUI などではありません)。

とにかく、Core i7 とかなり優れた Nvidia カードを搭載したデスクトップ Linux マシンでサンプルを実行しており、うまく動作しますが、私の 2010 MacBook Pro (Core i5 と Nvidia 330) では、特に非常にうまく動作しません。マウスを使用して操作するとき。

質問: このサンプルのパフォーマンスを改善する方法を提案できる人はいますか? 私は Qt の専門家ではありませんが、応答が遅いのはupdate()、マウス処理コード内からの呼び出しupdate()と、メソッド自体の最後での時間指定された呼び出しが原因であると思います。必要なのは、オブジェクトの動きを更新するためのバックグラウンド スレッドと、タイミングが決まっているが一定の への呼び出しだと思いますupdate()

誰でもこれについてコメントできますか?

編集:タイマーのリセットを除いて、へのすべての呼び出しを既に削除しようとしましupdate()たが、ほとんど違いはありません。

4

1 に答える 1

1

残念ながら、その記事の提案を使用したときに得られるパフォーマンスはかなり悪いものです。組み込みシステムでそれを試してみましたが、遅すぎました。

私たちにとっての解決策は、Qt 4.7 の新しい「宣言型」UI 機能である QML を使用することでした。C++ アプリケーションに QML が埋め込まれています。QML ウィジェットを GL シーンの上に重ねることで、速度が大幅に向上しています。

QML コンテンツを表示できる C++ アプリケーションで QDeclarativeView ウィジェットを使用しています。http://doc.qt.io/archives/qt-4.7/qdeclarativeview.htmlを参照してください。

これはデスクトップで問題なく動作するはずです (私の場合は Ubuntu で動作します)。

その他の便利なリンク:

C++ アプリケーションでの QML バインディングの使用

QML コードと既存の Qt UI コードの統合

アップデート!2015 年 1 月20 日: Qt5.4 には QOpenGLWidget と呼ばれる新しいクラスがあり、基本的には、OpenGL バックグラウンドで「クラシック」Qt ウィジェットを優れたパフォーマンスで使用できるようにします。彼らは最終的にこの問題に直接対処しました! ブログ投稿を読んでから、ドキュメントを読んでください。

QOpenGLWidget に関する Qt ブログ エントリ

QOpenGLWidget ドキュメント

于 2011-05-06T21:36:46.127 に答える