問題タブ [qglwidget]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 信頼できる QGLWidget スナップショットを取得する方法
私のアプリケーションでは、次の 2 つの目的で QGLWidget のコンテンツのスナップショットを作成します。
- 代わりにキャッシュされたピックスマップを使用して、オーバーレイのみが変更されたときに常にシーンを再描画するのではなく
- Lat ユーザーが特定のプロット (3D シーン) のスクリーンショットを撮る
最初に試したのはgrabFrameBuffer()
. この関数を最初のアプリケーションとして使用するのは当然です。現在ウィジェットに表示されているものは、まさに私がキャッシュしたいものです。
問題:一部のハードウェア (Intel integrade グラフィックス、GeForce グラフィックスを搭載した Mac OS X など) では、取得した画像に現在の画面コンテンツが含まれず、その前のコンテンツが含まれます。したがって、シーンが 2 回描画される場合、画面には 2 番目の描画が表示され、画像には最初の描画が表示されます (これはバックバッファーのコンテンツである必要があります)。
2番目に試したのはrenderToPixmap()
. これは を使用してレンダリングしますpaintGL()
が、 を使用しませんpaint()
。Qt の描画機能を使用し、ネイティブ GL ( 、 )paint()
を使用するのはコードのごく一部のみであるため、すべてのものは にあります。beginNativePainting()
endNativePainting()
通常の QWidget のスナップショット機能 (QPixmap::fromWidget()、またはそれと呼ばれるもの) も試しましたが、GL フレームバッファは黒です。
問題を解決し、現在描かれているシーンの信頼できる描写を得る方法についてのアイデアはありますか?
qt - QGLBuffer の使用法
QGLBuffer を使用して単純なオブジェクト (たとえば Rectangle など) をレンダリングする方法を理解するのに問題があります。アプリの選択長方形を作成しようとしています。これが私がやっていることのコード例です:
単なる例であるにもかかわらず、私のコードとテクノロジーの理解に間違いがあると確信しています。コードは間違いなくコンパイルされて実行されますが、何も描画されません。
c++ - Qt QGlWidget で描画するソリッド オブジェクトの過剰関数を取り除く
QGlWidget 内に 3D で球、円柱、および円錐を描画する必要があります。
今、私は glutSolidSphere、glutSolidCone、そして円柱を描画するための gluQuadric のひどいトリックを使用しています。
3D 描画に 1 つのフレームワーク (この場合は Qt) だけを使用し、これらすべての Glut 関数を取り除きたいだけです。
Qt <= 4.6 でこれを行う Qt クラスはありますか?
これを行うと、glutライブラリなしで実行可能ファイルを再配布し、glutInit関数も取り除くことができます!
multithreading - Qt での OpenGL マルチスレッド、glGet* の結果に関する問題
QGLWidget と OpenGL を使用して、Qt (4.8.2)(VS 2008) でグラフィック アプリケーションをコーディングしています。アプリケーションの簡単な説明は次のとおりです。これは物理シミュレーションです。2 つのスレッドで構成されます。メイン アプリケーション スレッドは、シーンの描画 (QGLWidget サブクラス) とイベントを処理します。計算スレッドは、シミュレーションの次のステップを計算するループにあります。今...カーソルを使用してシミュレーションを操作したいと思います(オブジェクトのドラッグなど)。シーンでインテリジェントなレイ シューティングと空間空間の分解を行わないことにしたので (後でやらなければならないかもしれません)、コンピューティング スレッドに次のような処理を実行させたいと思います。
[px;py;pz] ポイントのスクリーン [x;y] 座標を取得し、シミュレーションの次のステップの計算に使用します。さて、メイン スレッドは常に正しい modelviewMatrix および ProjectionMatrix 配列を取得しますが、これが計算スレッドによって実行されると、トラッシュ マトリックス データが取得されます。私は多くのことを試しました... OpenGLをクエリする前にmakeCurrent()を実行し、OpenGLアクションをロックして、マトリックスが変更されないようにしましたが、成功しませんでした。これも可能ですか?シーンの描画後、OpenGL は行列を保持しますか? このコードをスレッドセーフにする方法はありますか?
qt - QGLWidget。描画中に表示を更新します。
各ファイルには、表示したい3Dポイントが含まれています。各ファイルを読んだ後の表示を見たいです。file1の後、file2からポイントを追加する前にポイントを確認したいと思います。file3からポイントを追加する前に、ファイル1と2のポイントを確認したいと思います。
QGLWidget関数を使用してこれを行うにはどうすればよいですか?
探し回って、updateGL()関数を見つけました。新しいポイントが追加される前に毎回描画機能を更新することを考えましたが、それは非効率的です。コンテキスト(またはそれが呼ばれるもの)を保存する方法はありますか?
QGLViewerクラスを使用するライブラリlibQGLViewerを使用しており、QGLWidgetから継承しています。
qglwidget - QMainWindow に含まれる QGLWidget に QMainWindow のサイズ変更イベントを渡すにはどうすればよいですか?
最初はhttp://qt-project.org/wiki/How_to_use_OpenGL_Core_Profile_with_Qtの構造に従いました。バニラの Visual Studio 2010 Qt アプリケーション プロジェクトを作成し、.ui ファイルをクリックして Qt Designer を起動し、QWidget を挿入して myglwidget に昇格させました。次に、QGLWidget の myglwidget サブクラスを作成しました。
それはうまくいき、赤い三角形ができました。
問題は、メイン ウィンドウのサイズが変更されたときに、ウィジェットのサイズ プロパティを「拡張」に設定しても、myglwidget がサイズ変更イベントをまったく取得しないことです。
アプリのコンストラクターを再構築して setCentralWidget(&myglwidget_) を呼び出すと、コードはコンパイルおよび実行されますが、OpenGL ウィンドウは表示されません。
メイン ウィンドウのサイズに合わせてウィジェットのサイズを変更する方法がわかりません。setCentralWidget アプローチが機能しなかった理由も理解できません。
明示的な Qt コードを記述することで問題を解決する方法を知っていると思いますが、Qt Designer を使用して Qt で OpenGL アプリを構築しようとする目的が無効になります。
c++ - アプリケーション全体からQGLWidgetにアクセスしようとしています
私が基本的にやろうとしているのは、QGLWidget
(またはの派生クラスQGLWidget
)のインスタンスを1つ作成し、それをに追加してから、QTCreatorプログラムのどこからでもレンダリングコンテキストQMainWindow
にアクセスして、QGLWidget
どこからでも裸のOpenGLを呼び出せるようにすることです。私はすることを選びました。
私が試したこと:
1)QGLWidget
calledのサブクラスを作成OGLWidget
し、それをシングルトンにしてから、シングルトンクラス「OGLWidget」をサブクラス化しようとします。これにより、OGLWidgetシングルトンが使用していたのと同じレンダリングコンテキストにアクセスできると思いましたが、機能しませんでした。
2)コンストラクターを使用しQGLWidget(QWidget * parent, QGLWidget * shared, Qt::WindowFlags)
ます。これについては、シングルトンオブジェクトをQGLWidgetにキャストし、「Display」という別のクラスでQGLWidgetをサブクラス化するときに、このコンストラクターに貼り付けてみました。各クラスのopenGlを呼び出す前にmakeCurrentを呼び出してみましたが、元のシングルトンのみが描画されます。isSharingもチェックしたところ、trueが返されました。
c++ - paintEvent の Qt QPainter は、paintGL で描画されたグラフィックを削除します
次のコードがあります
問題は、行がQPainter
initializeGL と paintGL を数回呼び出し、最終的に OpenGL でレンダリングされたシーンに空白/灰色の領域を作成することですdrawText
。QPainter
私のOpenGLで描かれたシーンを完全にカバーする灰色の四角形。
これの何が問題なのですか?
c++ - QGLWidget paintEvent: openGL を初期化する場所は?
QGLWidget の paintEvent メソッドは initializeGL の前に呼び出されるようですが、openGL 初期化コードをどこに置くべきですか?
次のように paintEvent メソッドに入れています。
paintEvent が発生するたびに glew ライブラリの初期化関数を呼び出すという考えは本当に好きではありません...それは機能していますが。
なにか提案を?
c++ - QGLWidget-オーバーペイントを使用してプログラムを構成する方法
これは単純なはずです。QGLWidgetを使用してopenGLグラフィックを描画し、レンダリングされたopenGLグラフィックに何かを書きたいので、QPainterを使用したQtデモのようにオーバーペイントを使用しています。
これが私のプログラムを構築するための私の2つの実用的な選択肢です:
テクスチャとシェーダーが常に同じになるとは限らないことを考えると、これらのオプションのいずれかが(パフォーマンスと合理的に)受け入れられますか?
そうでない場合:プログラムをどのように構成しますか?
助けてくれてありがとう