問題タブ [fbo]
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.
performance - 最速の OpenCV 2 OpenGL コンテキスト
OpenCV ウェブカメラ キャプチャを取得して OpenGL コンテキストで表示する最速の方法を探して、数日間ネットを検索してきました。これまでのところ、ズームが必要になるまでは問題なく動作しているようです。
FBO アプローチを採用した方がさらに速いと聞いたことがあります。OpenCV WebカメラのキャプチャをOpenGLコンテキストに取得するための最速の方法に関するアイデア。見たものすべてをテストし、結果を投稿します。
opengl - openGL FBO をテクスチャにコピーすると、黒/暗いイメージになる
私のプログラムでは、オフスクリーン レンダリングを行う必要があります。そのために、FBO を使用します。描画した画像がテスト目的で正しいかどうかを確認するために、FBO からテクスチャにコピーし、そのテクスチャをクワッドにレンダリングします。問題は、FBO からテクスチャにコピーしてレンダリングすると、イメージが暗く表示されたり、黒い色になったりしますが、形状は正しいことです。FBO でテクスチャを添付ファイルとして使用し、(別のテクスチャにコピーせずに) 直接レンダリングしようとしましたが、色は正しいです。以下はテクスチャ作成のコードです
今、レンダリング機能で
セットアップには glut を使用しています。FBO の入札を解除し、glReadPixels(...) の代わりにテクスチャを入札した後、glGetTexImage2D などの他の関数を試しましたが、成功しませんでした。
c++ - OpenGL で FBO を使用したペイント アプリ
私は C++ と OpenGL (Cinder ライブラリを使用) でアプリケーションに取り組んでいます。
これは単純にマウス入力を取得しており、draw メソッドではマウスの位置に円を FBO に描画します。その後、FBO が画面に描画されます。FBO は毎回クリアされるわけではないので、以前のサークルはまだそこにあります。問題は、新しい円を FBO に描画すると、その上に描画されず、FBO の以前のコンテンツの下に描画されることです。FBO は、幅と高さのパラメーターのみで作成され、その他の設定はありません。setup() でもクリアされます。
opengl - Derelict3でフレームバッファがフリーズするのはなぜですか?
特定のopenGL3標準を使用するDerelict3を使用していますが、glEnable(GL_DEPTH_TEST)が呼び出された場合に画面がフリーズする(更新されない)という問題があり、呼び出されない場合は深度バッファーが機能しません。SDL_GLコンテキストを設定してDerelict3をリロードする前に行われた場合、クリアカラーを設定して深度テストを有効にする呼び出しは無視されることに気付きました。私はそれらを次の順序で作らなければなりませんでした:
これにより、標準のダブルバッファーへの書き込み中に深度カリングが整理されましたが、新しい深度バッファーとしてrenderBufferを使用してフレームバッファーオブジェクトを実装すると、フリーズします...プログラムは警告なしにコンパイルおよび実行されますが、レンダリングされた画像は画面に表示されます整列されたクワッドは固定されたままです。glEnable(GL_DEPTH_TEST);をコメントアウトした場合 カメラは自由に動きますが、レンダリングされた画像は深度テストを気にせず、オブジェクトを順番に描画するだけです。
フレームバッファ初期化コードは次のとおりです。
draw()でfboを呼び出すコードは次のとおりです。
同じコードがC#で正常に機能しているため、私は途方に暮れています。
c++ - GLSL と FBO - glActiveTexture が機能しない?
FBO にアタッチされたテクスチャを追加する単純なシェーダーを作成しようとしています。FBOの初期化などには問題ありません(テスト済み)。問題は、glActiveTexture(GL_TEXTURE0) だと思います。何もしていないようです-これが私のフラグシェーダーです:(しかし、一般的にシェーダーが呼び出されます-私は gl_FragColor = vec4(0,1,0,1); を置くことによってそれをテストしました;
そして、C++コードには次のものがあります:
結果: 黒い画面 (2 番目のテクスチャを表示し、シェーダーを使用する場合 (シェーダーを使用しない場合)物事をテストしていますが、アイデアは、最初のテクスチャにレンダリングした後、最初のテクスチャを2番目のテクスチャに追加することです.これを行うには、このフラグメントシェーダが機能すると思います:
そして、全体的なアイデアは、ループ tex2 = tex2 + tex1 であるということです (このシェーダーで tex2 を使用して、tex2 にアタッチされている GL_COLOR_ATTACHMENT1_EXT にレンダリングすることは可能でしょうか?) xShader.bind(); の両方をテストしました。均一変数を初期化する前と後。どちらの場合も - 黒い画面。
とにかく、しばらくの間、テクスチャのサンプラーの初期化に問題があると確信しています (FBO に接続されている可能性があります)。
私は残りをチェックしました、そしてそれはうまくいきます。
また、別のばかげた問題:
画面全体にテクスチャをレンダリングするにはどうすればよいですか?
私はそのようなことを試しましたが、うまくいきません(このクワッドを少し翻訳する必要があります)
glVertex2f でも動作しません。
編集:チェックアウトしましたが、テクスチャのみが問題であるいくつかの均一な変数を初期化できます。
順序を変更しましたが、まだ機能しません.:(ところで、他のユニフォームの値はうまく機能しています.シェーダーにも渡したいテクスチャを表示しました.正常に動作します.しかし、不明な理由でテクスチャサンプラーが初期化されていません.おそらく、このテクスチャが glTexImage2D(GL_TEXTURE_RECTANGLE_NV, 0, GL_RGB16F / GL_FLOAT_R32_NV /, OPT.m_nWidth, OPT.m_nHeight, 0, GL_RED, GL_FLOAT, NULL); (GL_TEXTURE_2D ではない)
opengl - OpenGLプログラミングを介してビデオメモリ全体にアクセスする
OpenGLプログラミングを介してグラフィックカードのビデオメモリにアクセスするには、具体的には、ビデオメモリのすべてのコンテンツを取得するにはどうすればよいですか?
次の2つの方法を試しましたが、失敗しました。それらを添付することで、私のプログラムまたはビデオメモリの構造の理解におけるエラーを指摘していただければ幸いです。前もって感謝します!
私の基本的な考え方は、ビデオメモリのすべての内容を調べるまで、ビデオメモリに初期化されていない領域を割り当て続けることです。
(1)main関数で、ダブルバッファーを使用してウィンドウを作成します(次のコードを参照)。
次に、「myDisplay」関数で、最初にglReadPixels()関数を呼び出して、バックフレームバッファーから指定されたサイズのピクセルの長方形を読み取り、これらのピクセル情報を配列「PixelData」に保存し、最後にそれらのピクセル情報をに表示します。 glDrawPixels()関数を呼び出して画面を表示します。このプログラムを実行すると、黒いウィンドウのみが表示されます。デフォルトの色は黒です。つまり、ウィンドウには何も含まれていません。次に、バックフレームバッファから他の領域を読み取ろうとしましたが、すべてに何も含まれていません。
上記の結論は、バックフレームバッファには何も含まれていないということです。ただし、フロントバッファには現在の画面コンテンツ/ウィンドウのみが含まれている必要があるため、これは不合理です。したがって、画面の下部で開いて最小化された他のウィンドウのコンテンツはバックフレームバッファに含まれている必要がありますが、バックフレームバッファは空です。では、それらのウィンドウ(下部にある私が開いて最小化したもの)はどこに保存されますか?
私のプログラムに割り当てられたフレームバッファ(背面と前面)は、ビデオメモリ全体のごく一部しか占めていないと思います。したがって、これらの最小化されたWindowsコンテンツは、ビデオメモリの他の場所に保存する必要があります。
しばらくして、OpenGL frameBufferオブジェクト(FBO)の概要を読みましたが、次のような文があります。デフォルトでは、OpenGLは、ウィンドウシステムによって完全に作成および管理されるレンダリング先としてフレームバッファーを使用します。このデフォルトのフレームバッファは、ウィンドウシステムが提供するフレームバッファと呼ばれます。これは私の上記の推測を検証しているようです。
(2)次に、FBOがビデオメモリコンテンツ全体の調査に役立つことを期待して、FBOの作業を開始します。
以下のメイン関数では、FBOと7つのrenderbufferオブジェクト(RBO)を作成し、これらの7つのRBOをカラーアタッチメントポイントを介してこのFBOにアタッチします。
以下は、私のdisplayコールバック関数の主要部分です。その機能は、スペースキーを使用して、読み取るrenderBufferオブジェクトを制御し、そのコンテンツを画面に表示することです。
最終的な結果は残念です。すべてのrenderBufferオブジェクトの内容は空です。これらのRBOはすべて初期化されておらず、残りのコンテンツが含まれているはずだと思ったので、原因はわかりません。
opengl - OpenGLフラグメントシェーダーがfboカラーバッファーに書き込みません
フラグメントシェーダーからFBOのカラーバッファーへの書き込みに問題があります。アイデアは、このテクスチャに描画してから、このテクスチャをクワッドに描画することです。つまり、FBOを削除するとシーンが表示されるため、デフォルトのウィンドウバッファに描画するときにシェーダーが機能します。そして、クワッドのテクスチャリングも機能します。インポートしたテクスチャで試してみました。私が得ているのは黒い画面だけです。何がうまくいかなかったのでしょうか?:(
FBOを作成するためのコード:
レンダリングのコード:
クワッドのコード:
そして最後に、フラグシェーダー、すべてを単色に描画するように設定しました。
編集:それが何か助けになるなら、すべてがQtGLWidgetにあります。
java - Android の OpenGL ES 2.0 では、フレームバッファでレンダリングするときにマルチサンプリングを維持する方法はありますか?
OpenGL es 2.0 と Java を使用して、Android ICS で 2D ゲームを開発しています。私は照明システムを使用しようとしています。そのために、すべてのライトをフレーム バッファーにレンダリングし、シーンを別のフレーム バッファーにレンダリングします。これは、フラグメント シェーダーを使用してそれらをブレンドし、Photoshop オーバーレイ効果を再現することを目的としています。
しかし、問題が発生しました。fbo はマルチサンプリングでは機能しないようで、fbo で描画するとギザギザの線が表示されます。iOS を使用している人向けの解決策があることに気付きましたが、Android では何も見つかりませんでした。この問題に取り組んでいる方法よりも、私がやろうとしていることを達成するためのより良い方法はありますか? 許してください、私はopenglに少し慣れていません。
どうもありがとうございました。
opengl - 複数のテクスチャへのOpenGLレンダリング、結果は白
シェーダーをサポートするようにレンダリングコードを切り替え始めましたが、バックバッファーにレンダリングするときにすべて正常に機能します。そのため、現在FBOへのレンダリングに取り組んでいますが、取得できるのは、カラーと法線の両方の白いテクスチャだけです。
これが私のFBO作成コードです:
そして、現在のレンダリングターゲットを設定するために使用するコード:
そして最後に、私の実際の描画コード:
c++ - Android OpenGL ES 2.0: GL_FLOAT テクスチャを COLOR 添付ファイルとして FBO に割り当てることはできますか?
glReadPixels でGL_FLOAT テクスチャを使用して値を取得したい。
私の Android デバイスはOES_texture_floatをサポートしています。が、 GL_FLOATテクスチャを付けるとエラーになりました。
Android の OpenGL ES 2.0 では、GL_FLOATテクスチャを FBO にアタッチすることはできませんか? それともハードウェアに依存しますか?
私のコードの一部は次のとおりです。
初期化:
FBO アタッチ:
誰かが何らかの洞察を持っているなら、私はそれを高く評価します。