問題タブ [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.

0 投票する
1 に答える
2774 参照

macos - FBO: テクスチャへのレンダリング、レンダリングされたテクスチャを描画するときの間違ったテクスチャ マッピング

Mac OS X アプリケーションで OpengGL を使用して、NSOpenGLView.

アプリはムービープレーヤーです。ムービー フレームをCVOpenGLTextureRef(OpenGL テクスチャである) にデコードし、. を使用してビューに直接描画しますGL_QUAD。すべてが正しく機能します。

以下は、コードの関連部分です。

それは問題なく動作し、ウィンドウのサイズを変更でき、テクスチャは小さいウィンドウに正しくマップされます。

フルスクリーンから 500x280 ピクセルまでのさまざまなウィンドウ サイズについては、こちらを参照してください。 FBOなし

テクスチャへのレンダリングに FBO を使用したいので、ムービー フレームをオフスクリーン FBO (テクスチャ) にレンダリングし、そのテクスチャをバインドして画面に描画するという非常に単純な実装を作成し始めました。

コードは次のとおりです。

イメージ/テクスチャが上下逆になっているだけでなく、テクスチャ マッピングも間違っているため、コードは正しく機能しません。ウィンドウが全画面の場合にのみ正しく機能し、それ以外の場合は非常に奇妙な動作をします。

下の画像を参照してください。 FBOあり

ご覧のとおり、テクスチャはウィンドウ内で正しくスケーリングされますが、全画面ウィンドウ サイズと実際のウィンドウ サイズの差に比例して「トリミング」されます。

私は成功せずにすべてを試しました。

OpenGL を使用するのはこれが初めてなので、何か不足していますか? 気が狂いそう..

0 投票する
1 に答える
592 参照

opengl - OpenGL:FBOにレンダリングするときにテクスチャコンバイナー関数がサポートされていますか?

最初のFBOにレンダリングされたOpenGLテクスチャがあり、その明るさを編集し、2番目のFBOにレンダリングしてから、画面に描画する必要があります。

テクスチャを(明るさを変更せずに)2番目のFBOにレンダリングしてから画面に描画すると、正しく表示されます。

レンダリングされたテクスチャの明るさを編集しようとすると(のようなテクスチャコンバイナ関数を使用してglTexEnv)、すべて黒またはすべて白のテクスチャ、変更されたコントラストなどの間違った出力が得られます。

FBOの代わりに画面に描画しているときに明るさの調整を適用すると、うまく機能します。明るさは期待どおりに変更されます。

glTexEnvだから私の質問は: FBOにレンダリングするときのようにテクスチャコンバイナー関数を使用できますか?

これは、FBOに描画するときに明るさを変更するために使用するコードです(機能しません)。

0 投票する
1 に答える
4442 参照

opengl - FBO ブリッティングが機能しない

マルチサンプリングされたシーンをテクスチャにレンダリングしようとしています。使用しているコードは次のとおりです。黒い画面が表示されます。init の最後に fbo の完全性をチェックすると、両方の fbo が完了していると報告されます。

私が忘れたものを見つけることができますか?glFramebufferRenderbuffer問題は通話にあると思います。最初の引数をに切り替えてみましたGL_READ_FRAMEBUFFERが、修正されませんでした。

確認glGetErrorしましたが、エラーはありません。INVALID_ENUM何か間違った設定をすると、必ず何かが失敗INVALID_OPERATIONし、問題を絞り込むのに役立ちます。

このコードを使用する方法は、マルチサンプリングを有効にするために変更する必要があるのは、描画時に multi_fbo をバインドし、バインドしてブリットする resolve 関数を呼び出すことだけです。その後、私の fbo テクスチャ (直接レンダリングすると正常に動作します) には、マルチサンプリングされたレンダリングが含まれているはずです。ただ、黒いだけです。glEnable(GL_MULTISAMPLE)また、初期化コードの別の部分も呼び出しました。

マルチサンプリングされていないテクスチャを別のテクスチャにブリットして、それが機能することを確認します。うまくいけば、それは私が失敗した場所を絞り込むのに役立ちます.

更新: したがって、通常の FBO を別の同一の FBO (どちらもカラー アタッチメント 0 にテクスチャがアタッチされています) にコピーすると、同じ黒い画面が生成されることがわかりました。ブリットは単に機能しません。

また奇妙なのは、ブリットしようとすると、SOURCE fbo のテクスチャを描画しても、まだすべて黒のままです。ブリットしようとすると、すべてが台無しになるようなものです。

FBOブリッティングコードを知っている、または持っている人はいますか? 見つけることはできませんが、マルチサンプリング FBO が機能している人がいることは知っています。

支援方法は次のとおりです。任意の時点で呼び出すコードがある場合はglBlitFramebuffer、その操作を設定するための他の呼び出しを確認したいと思います。起動すると、黒いバッファとテクスチャしか取得できないようです。

更新: バックバッファへのブリットは、マルチサンプリングでも機能します! もちろん、フレームバッファ 0 をバインドするだけなので、セットアップはまったく必要ありません。したがって、問題は、ブリットされるはずのテクスチャ アタッチメントを持つ FBO のセットアップにあるようです。

0 投票する
1 に答える
5610 参照

opengl - マルチサンプリング テクスチャで Framebuffer オブジェクトをレンダリングする方法は?

現在、画像のさまざまな部分がテクスチャでレンダリングされ、シェーダーを使用して結合される複数のパスを使用するレンダリング エンジンがあります。それは機能し、マルチサンプリングを有効にしたいと思います。

ここ ( http://www.opengl.org/wiki/Framebuffer_Object_Examples#MSAA )を読みましたが、OpenGL を使用するGL_TEXTURE2D_MULTISAMPLEと、フレームバッファー オブジェクトに をアタッチできません。

マルチサンプリングを使用し、テクスチャとして結果にアクセスする方法の 1 つは、マルチサンプリングされたレンダー バッファを使用し、その結果をマルチサンプル テクスチャにコピーすることです。

私の質問は次のとおりです。前進するための最良の方法は何ですか?

  • テクスチャにコピーせずに、レンダー バッファーでレンダリングし、シェーダーで出力を使用することは可能ですか?
  • 実際にバッファの内容をテクスチャにコピーしてから使用する必要がありますか?
  • 別のより良い解決策はありますか?

ありがとう。

0 投票する
2 に答える
314 参照

opengl-es - 複数のバッファがアタッチされていない、より大きなGLSLフラグメント出力

それ以上を放出する方法はありますか?実装が複数のFBOバッファーアタッチメントまたは「ディープ」バッファー形式をサポートしていない場合、GLSLフラグメントシェーダーから4バイト?

たとえば、WebGLまたはOpenGL ESを使用する場合、フラグメントごとにRGBA出力に制限すると、計算の一部を複数のパスで繰り返してより多くの出力チャネルを取得する必要がある場合、複雑な計算は非常に非効率になります。

0 投票する
1 に答える
954 参照

opengl - フレームバッファ オブジェクト、テクスチャのレンダリングとシェーダへの受け渡しに関する問題

シンプルなシーンをフレーム バッファにレンダリングし、これをテクスチャとしてシェーダに渡そうとしています。ただし、レンダリングされたオブジェクトは黒く表示されます。自分が何を間違えたのか理解できません。

以下のコードでは、FBO を作成し、深度バッファーとテクスチャーをアタッチしています。

以下のコードは私のレンダリング方法です。tga テクスチャで試してみましたが、うまくいきました。

.tga テクスチャを試してみましたが、シェーダーはうまく機能します。私は glfw と glew を使用しています。また、glSomeFunction と glSomeFunctionEXT の違いについてもわかりません

0 投票する
0 に答える
222 参照

opengl - FBO からの OpenGL テクスチャリング (mimap の有無にかかわらず)

FBO を使用する際に明らかな何かが欠けているに違いありません:

アプリケーションの開始時に TMyForm::Init() を 1 回呼び出します。

Draw() 関数では、バッファーをカード (レンダリングされたシーンは問題ありません) とプレビュー ウィンドウ (デフォルトのウィンドウ コンテキストまたは fbo コンテキストに戻すかどうかに応じて、すべて黒またはすべて白) に送信します。

だから私の問題は、私が望むことをしない「パート2」です.fboコンテンツを現在のウィンドウにテクスチャリングします。「glTexCoord2d」を変更しようとしましたが、成功しませんでした。

0 投票する
1 に答える
1701 参照

android - OpenGL ES 1.1:glBlendFuncSeparateを置き換える方法は?

私の問題はこことほとんど同じです

glBlendFuncSeparateが利用可能だった場合、これも答えになります。

ただし、MALI-400MP(Samsung Galaxy Nexus S II)のサポートを提供する必要があるため、glBlendFuncSeparate(GL_OES_blend_func_separate拡張機能が存在しません)を使用できません。

glColorMaskの使用をお勧めしますが、どうすれば適切に使用できますか?これを行う他の方法はありますか?

0 投票する
2 に答える
1425 参照

opengl - 私自身のZバッファ

アルファ チャネルを正しくブレンドするために独自の Z バッファを作成するにはどうすればよいですか? 私はgslを使用しています。アイデアは 1 つだけです。そして、これは 2 つの「バッファ」を使用します。そのうちの 1 つは深度コンポーネントと別の色 (アルファ チャネル付き) を格納します。プログラムでバッファにアクセスする必要はありません。glslにはユニフォーム変数の数に制限があるため、ユニフォーム配列を使用できません。フレームバッファの書き込みと読み取りの動作が定義されていないため(そしてどのカードでも動作しないため)、FBOを使用できません。

どうすればこの問題を解決できますか?!

または、glsl から実際のリアルタイム z バッファを読み取る方法は? (つまり、フラグメントシェーダー呼び出しごとに z-buffer を更新する必要があります)