4


0

私はOpenGLでプログラムを書いています、そして私はある種のインターフェースツールバーが必要です。 私の最初の反応はGUIを使用することでした、それからCへのそれ以上の調査私はGUIが使用しているOSに依存していることに気づきました(私はWindowsを使っています)。 したがって、私は私を助けるためにQTを使うことにしました。

私の質問は、私がこの解決策に対して最善/適切なアプローチを取っているかどうかです。 私は自分のOpenGLプログラムを書くことさえでき、そして私がやりたいことをするためにCコードとのインターフェースを作りたいGUIを持つことさえできます。

たとえば、各方向に矢印の付いた単純な「コントロールパネル」を作成するとします。 そして画面上に、glutによって作られたboxオブジェクトがあります。クリックする矢印をインターフェイスし、openGLプログラムと対話してboxを動かすことができますか?

3 Answer


7


Qtを使うことはあなたの問題にとって首尾一貫しています:それはQtOpenGLモジュールを通してOpenGlの良い統合を提供します。

  1. QGLWidget(Qt 4.8まで)または (Qt 5.4以降の) QOpenGLWidget`および仮想メソッド paintGL() `などを実装します。

  2. Qtのシグナルおよびスロットシステムにアクセスできるようになるため、 Guiイベントをキャッチし、OpenGl表示を更新できるようになります。


-1


あなたは `QGLWidget`の上に通常の非OpenGL Qtウィジェットを使うことができるので、あなたが説明することは可能です。

このとき私が出会ったことの1つは、通常のウィジェットは不透明でなければならないということでした。 彼らが何らかの形で透明になった瞬間、その下にはあらゆる種類のゴミがありました。 それは少し前だったので、最新版がこの問題に対処しているのかもしれません。 YMMVもそうプラットフォーム固有のものかもしれません。


-1


GLUTにとどまる。 コントロールパネルにQtを追加する必要はありません。 あなたはサブウィンドウ(またはあなたのプログラム設計のためにどちらがより良いものでもどちらでもよい)を開くことができ、そしてそのウィンドウにコントロールを描き、そしてマウスの相互作用を扱うためにGLUTを使用することができます。

さらに、QtとGLUTはそれぞれ独自のイベントループを持っています。 単にQtのイベントループを使用するには、GLUTイベントループがコールバック関数を呼び出すために存在しないため、多くのGLUT構造体を破棄する必要があります。 Qtには他の誰かのイベントループにQtのイベント処理コードを呼び出させる機能がありますが、GLUTにイベント情報を渡す簡単な方法はないと思います。