問題タブ [qtopengl]
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++ - ウィジェットでのレンダリングに QOpenGLContext を使用する
最近、Qt で OpenGL レンダリングを行う方法を理解しようとして、さまざまな資料をオンラインで読んでいますが、古い QGL モジュールは非推奨になっているようです。私は新しい QOpenGLContext が本当に気に入っています。これは、GLEW を使用する必要がなく、open gl 関数を初期化する機能です。ただし、QGLWidget のようにウィジェットでこれらの関数を使用する方法がわかりません。OpenGL でレンダリングするサーフェスの周りにボタンやその他のウィジェットを配置する必要がありますが、オンラインのすべてのチュートリアルと例は、QWindow 全体をレンダリング サーフェスとして使用することになっていることを示しています。では、Qt でウィジェットにレンダリングする際に、新しい便利な API を使用するにはどうすればよいでしょうか?
c++ - Qt はどのバージョンから opengl をサポートし始めましたか?
(Qtのドキュメントでは)Qt 2.3にはopenglモジュールがあったと言われています。では、そのサポートの始まり (バージョン番号) はどこにあるのでしょうか?
c++ - QtOpengl の進化
私が理解しているように、初期の Qt バージョンにはモジュールはなく、グラフィカルを含むさまざまな機能を持つ個別のクラスがありました。OpenGL サポートは qt 1.2 で実現されました。ただし、QPainter、QImage は初期のバージョンに存在していました。では、これらのクラスはネイティブ (つまり、原始的なクラス) であると言うのは正しいでしょうか。opengl クラス - 非ネイティブ (結局のところ、separste ブランチです)? Qt で 2D グラフィックスを作成するための非ネイティブで代替的な方法としての Qtopengl のさらなる進化、(2D グラフィックスを作成するための) ネイティブ メソッドの進化に対するこのモジュールの影響について学びたいと思います。
data-visualization - qt と qtopengl によるデータの視覚化
「データの視覚化またはデータの視覚化は、データの視覚的表現の作成と研究であり、「情報の単位の属性または変数を含む、何らかの概略的な形式で抽象化された情報」を意味することを理解しています。
そして今...それは非常に奇妙な質問ですが...qtとqtopenglを使用して(非常に)単純なプログラムを作成したいと思います-頂点がRGB座標を持つ立方体、つまりその色(0,0 ,0; 0,255,0 など)。このプログラムはデータの視覚化を説明しますか (ほんの少し...)?
qt - Qt OpenGL ウィジェットの 3D モデル (.3ds)
QGLWidget (Qt OpenGL ウィジェット) に 3D モデル (.3ds ファイル) をロードする必要があります。Linux、Windows、Mac で動作するクロスプラットフォーム ソリューションを探しています。
Web でいくつかのソリューションを見つけましたが、Qt アプリケーションにそれらの機能を統合することはできませんでした。
Assimp: クロスプラットフォームではなく、.3ds モデルをサポートしていません ( http://assimp.sourceforge.net/ )
Qt3D: クロスプラットフォームであり、OpenGL ウィジェットの正しい選択と思われます。残念ながら、私はまだそれを使用する方法を見つけていません。( https://github.com/qtproject/qt3d )
Qt Quick: QT ウィジェットの代わりに QML ファイルを使用します。
3ds ローダー: http://www.spacesimulator.net/wiki/index.php?title=Tutorials:3ds_Loader
なにか提案を?
qt - QTimer を使用して QTGLWidget を修正し、レンダリング時間を短縮するにはどうすればよいですか?
現在、プログラムに QtOpenGL を使用しています。私のプログラムは、3D 空間にドットをプロットします。これらのドットは、1 から数千の間の任意の数である可能性があります。各ドットを表す球を描画するために、関数「glusphere」を使用しています。これで各フレームが作成され、QTimer を使用して各フレームをアニメーションとして表示する必要があります。このアニメーションは fps で制御する必要があります。たとえば、fps=30 の場合、QTimer の setInterval(t) に t=1000/30 を設定します。fps を 0 に設定して問題を探し、setInterval(0) を使用してレンダリングにかかる時間を観察しました。結果は次のとおりです。
n = 球の数
n=10の場合:28ms⇒約30ms
n=100の場合:87ms⇒約90ms
n=150の場合:137ms⇒約140ms
n=1000の場合: 598ms => 約600ms => 0.6秒
上記の結果から、各フレームのレンダリング時間は、球の数に比例して増加します。以下は私のコードの一部です:
明確にするために:
- 各フレームのレンダリング時間は、球の数によって異なります。
- 球の数によってレンダリング時間が変わるべきではありません
- 1000 個の球体を描画しても、0.5 秒かかります
- 問題はglusphereの使用にあると思いますか?
- 球を描画する別の方法があれば、100 fps 以上で描画することは可能でしょうか?
この遅いレンダリングを引き起こしているボトルネックがどこにあるのか、誰か説明してもらえますか?
c++ - QOpenGLTexture と QOpenGLFrameBufferObject を使用したマルチテクスチャリング
以前のプロジェクトを新しい Qt5 OpenGL クラスに移植しようとしています。FBO を使用してテクスチャにレンダリングしたいと考えています。前のコードでは、FBO オンデマンドにアタッチした複数のテクスチャを利用しました。そのため、特定のテクスチャ オブジェクトをアタッチしてレンダリングを実行し、別のテクスチャをアタッチして別の操作を実行し、出力を新しくアタッチされたテクスチャにレンダリングする、などを行います。
Qt5 OpenGL クラスを使用してこれを行うにはどうすればよいか疑問に思っていました。たとえば、特定のQOpenGLTexture
オブジェクトをにアタッチしQOpenGLFrameBufferObject
てレンダリングできるようにする方法がわかりません。texture()
方法と方法があることがわかりますtakeTexture()
。しかし、どちらもテクスチャ ID を返すだけです。また、アクティブなテクスチャ ユニットを変更するにはどうすればよいですか? たとえば、シェーダー プログラムで 2 つのテクスチャからサンプリングしたいとします。そのため、2 つのテクスチャを異なるテクスチャ ユニットにバインドする必要があります。
明確にするために、私が新しい API で抱えている主な問題は、オブジェクトQOpenGLFrameBufferObject
を返すメソッドが見当たらないことです。メソッドとandメソッドQOpenGLTexture
しかありません。from から返されたを使用して を構築できたと思います。しかし、それが効率的かどうかはわかりません。toImage()
texture()
takeTexture()
QOpenGLTexture
QImage
toImage()
texture()
とについてtakeTexture()
は、新しいクラスを使用してそれらの戻り値をどのように使用できるかわかりません。
c++ - 回転が関係している場合に OpenGL でマウス座標をモデル座標に変換する
Qt フォーラムでこの質問を見つけ、好奇心を刺激しました。
Qt で立方体を表示する非常に単純な例を見つけ、立方体のロジックを変更して、辺の長さが 1 単位の立方体を作成しました。
次に、モデルをクリックして、クリックした領域の座標を表示しようとしました。
回転が関係していない場合、ピッキングはうまく機能しているようです。しかし!ローテーション (またはその 1 つ) のコメントを外すpaintGL
と、「間違った」値になってしまいます。
例えば:
- 回転せず、立方体のほぼ左端の境界をクリックします。
gluUnProject
メソッドは、ポイントをクリックしたことを示していますが{ -0.49075, 0.234, 0.5 }
、これは問題ないようです。
- 回転を有効にして、立方体の最も左端の境界をクリックします: ポイントを受け取りましたが
{ -0.501456, 0.157555, -0.482942 }
、これは間違っているようです。x
座標が の範囲から外れています-0.5, 0.5
。
座標変換は大丈夫だと思います。私は Google を通じて調査してきましたが、人々は常に同じコードを使用しています。また、ピクセルの色情報は、クリックした顔の色と一致します。
では、回転が関係しているときに座標が間違っている理由を誰か教えてもらえますか? 基本的な 3D の理解に失敗していると思いますが、それがどこにあるのかわかりません。
コードは次のとおりです。
main.cpp:
GLCube.h
GLCube.cpp:
ノート:
これを Windows 8.1 64 ビット、Qt 4.8、および MinGW で実行しています。
また、両方ともエラーなしglReadPixels
でgluUnProject
終了します (ERROR CODE = GL_NO_ERROR
)
そしてglut
利用できません。OpenGL
、QtOpenGL
および/またはglu
提供するもののみ。
opengl - QQuickItem 上の Qt Rectangle が正しくレンダリングされない
QQuickItem を使用して QT5 で痛い問題があります。QML で純粋な openGL を使用して 3D モデルを描画する必要があったため、独自のカスタム QQuickItem を作成しました。これまでのところ、すべてが期待どおりに機能しています。3D モデルは QML で美しく表示されています。
この問題は、カスタム QQuickItem の横にある同じ QML に単純な Rectangle を配置したいときに発生します。3D モデルが表示されなくなりました。何故ですか?
これが私のカスタムクイックアイテムコードです:
そして、これが私のQMLで、3Dモデルの上に小さな長方形があります:
少なくともこの問題の説明や提案を誰かに教えてもらえますか?
c++ - OpenGL: 複数の Rending メソッド .. いつどれを使用するか?
私は OpenGL を初めて使用し、複数のチュートリアルに従っています。オブジェクトをレンダリングするために使用される複数のメソッドがあることに気付きましたが、それでもそれらの違いと、それぞれをいつ使用するかがわかりませんか?
たとえば..シェーダーを使用して立方体をレンダリングするこの例に従い、「通常の」方法を使用してレンダリングしようとしたとき-これが正しい式である場合。何もレンダリングされていません。私はいつも電話する必要がありshaderProgram.setAttributeArray()
、shaderProgram.enableAttributeArray()
そしてshaderProgram.disableAttributeArray()
しかし、別の方法を使用して直接レンダリングしようとすると、これが正しい式である場合は、 and を使用glBegin()
しglEnd()
ます。何も機能していません
また、シェーダーの概念自体に別の質問がありますが、いつ使用すべきか、いつ使用すべきでないかがよくわかりません
これが私の例です: