2013-12-11 23 views
9

3Dシーンを別のビューポートにレンダリングしたいとします。これらのビューポートは、このような、独自のメニューを持つ「サブウィンドウ」に含まれています: enter image description hereQt 5を使用した複数のOpenGLビューポート

各ビューポートが使用できます

サイズ変更
  • 隠し;
  • フルスクリーンで表示されます。
  • アプリケーションの別の部分に移動しました。

だから我々は次のように何か持っていることができます。私は私のOpenGLウィジェットを含むQtのウィジェットに各ビューポートを埋め込むために優れていると信じて enter image description here

を(その権利であります?)。だから3DシーンをいくつかのQt OpenGLウィジェットにレンダリングするにはどうすればいいですか?

+0

Qtウィジェットは「表示」、「シェーディング」、「ライティング」オプションをすべて単独で提供していますか?このウィジェットの名前は何ですか? – sonofrage

答えて

4

私は(右のことです?)私のOpenGLウィジェットを含むQtのウィジェットに各ビューポートを埋め込む方が良いと考えています。それでは、どのように私は、いくつかのQtのOpenGLウィジェットに私の3Dシーンをレンダリングすることができますか?

QGlWidget's detailed descriptionで説明したように、initializeGLとpaintGLを上書き以外に、あなたはまた、resizeGLメソッドをオーバーライドする必要があります。 resizeGLメソッドでは、ビューポートと錐台を調整する必要があります。

その後、ウィジェットを作成して画面に配置するだけです。それらは互いに完全に独立していても構いません。

これらのウィジェット間でOpenGLコンテキストを共有したいので、OpenGL context sharingを見てください。実際には、OpenGLコンテキストオブジェクトをQGLWidgetのコンストラクタの最初のパラメータとして渡す必要があります。

+1

あなたのアンサーに感謝します。 1つの3DシーンをレンダリングするQGlWidgetが8個ある場合は、OpenGL(VAO、VBOなど)を1回だけ初期化する必要があります。これらの8つのオブジェクト間で初期化(およびレンダリング)を "共有"するにはどうすればよいですか? – Korchkidu

+3

@Korchkidu一般的なOpenGLコンテキストを使用します。 http://qt-project.org/doc/qt-5.0/qtgui/qopenglcontext.html#context-resource-sharing –

+0

@Korchkiduを参照してください。また、特定のコンテキストオブジェクトを使用してQGLWidgetを作成する必要があります。http:// qt-project .org/doc/qt-4.8/qglwidget.html#QGLWidget-2 –

関連する問題