0

Qt5を使用して単純なOpenGLアプリケーションに取り組んでおり、新しいQOpenGLクラスを使用して、頂点バッファー、インデックスバッファー、およびシェーダーを処理しました。しかし、私はテクスチャに少しこだわっています。

QOpenGLBufferとQOpenGLShaderProgramを持っています...しかしQOpenGLTextureはどこにありますか?そのようなクラスはQt5クラスリストに存在しないようです。テクスチャを管理するために直接OpenGL呼び出しに頼る必要がありますか?

4

5 に答える 5

3

そうです。Qt5のQtGuiモジュールにはそのようなクラスは存在しません。もちろん、ウィジェットライブラリを取得したくない場合は、テクスチャを処理するためにプレーンなOpenGL呼び出しに頼る必要があります。

そうは言っても、現在の(たとえば、いくぶん最適ではなく、一貫性のない)状況は認識されており、Qt開発者によって活発に議論されています。Qt5.1以降のSeanHarmerのOpenGL、特にポイント7を参照してください。しかし、そのスレッドに続いて現在の開発ツリーを見ると、5.1に到達するかどうかは疑問です。


編集:他の回答と、標準のQt5.0で使用できるオプションに関して追加したい最近のコメントを見てください。

あなたの主な目標は次のとおりです。

  1. glTexImage2D(..., GL_UNSIGNED_BYTE, GL_RGBA, pointer)潜在的に「奇妙な」フォーマットのQImageから渡すことができるポインタを取得しますか?また
  2. glTex*()関連する機能を扱うのを惜しまないヘルパークラスを使用しますか?

それが最初であり、(古い)OpenGLモジュール(Qt 5.0の一部)をリンクすることがオプションである場合(そして「美的」理由は別として、なぜそうではないのかわかりません)、静的を使用できますQGLWidget::convertToGLFormat(QImage)ビクターがほのめかしていたこと。そうでない場合は、その関数のようなことを(Xīcòが提案したものに沿って)「手動で」実行する必要があります:基本的に最初に呼び出しQImage::convertToFormat(QImage::Format_ARGB32)てから、プラットフォームに依存するバイトスウィズリングとミラーリングを追加します(ソースのconvertToGLFormatHelper(...)を参照) )。ただし、独自のシェーダーを使用する場合は、GPUでそれを実行する方がはるかに高速です。

両方が必要で、前述のOpenGL Qt 5.0アドオンモジュールをリンクすることがオプションである場合はQGLWidget::bindTexture(...) QQuickViewクラスでも同等のものを実際に使用できる可能性があります。

GLuint texID = QGLContext::fromOpenGLContext(
                   this->openglContext())->bindTexture(...)

thisQQuickView*はどこにありますか。QGLContextヘルプを参照してください。(免責事項:私はそれを自分で試していません。)

于 2013-02-20T16:07:24.667 に答える
1

QImageglTexImage ..()関数に提供できるOpenGL対応フォーマットを直接サポートしています。

ここで第6章の注釈を参照してください。

そうです、直接OpenGL呼び出しを使用できます/使用する必要があります。

于 2013-02-16T21:16:15.520 に答える
1

いや。非ウィジェットアプリでQImagesをOpenGL形式に変換するには、QGLWidgetを含める必要がありますか?

マシンのエンディアンと必要なOpenGL形式に応じて、次のような定式化を使用できます。

QImage gl_compatible_image = standard_image.rgbSwapped ().mirrored ();

たとえば、Format_RGB32QImageをGL_RGBAIntelマシンのテクスチャにマッピングします。

于 2013-02-21T00:09:56.207 に答える
1

私が探しているクラスはQGLTexture2D、Qt3Dの一部であるようです。残念ながら、axxelが言及しているように、これはQt 5.0の一部ではなく、Qt5.1に組み込まれない可能性があります。

そうは言っても、Qt3Dを自分で取得して構築することはできました。QGLTexture2Dその後、私はと非常によく似た方法で使用することができ、QOpenGLBufferQOpenGLShaderProgramはすでに持っています。

于 2013-02-21T05:33:04.947 に答える
1

QOpenGLTextureはQt5.2で追加されました

于 2015-09-23T11:33:13.527 に答える