問題タブ [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 に答える
516 参照

c++ - OSX で FBO が正しく機能しない

私はしばらくの間この問題を抱えていましたが、解決策を見つけることができませんでした。

ここで、Framebuffer を初期化します。

次のようにレンダー関数で使用します。

ここで起こることは、"scene1" がアタッチされた Framebuffer テクスチャでレンダリングされることです。そして、「scene2」が画面に表示されるはずです。「scene2」は画面に表示されますが、レンダリングされた Framebuffer テクスチャを使用すると、次のように表示されます。 GPU メモリのガベージのようです。 :)

誰が何が悪いのか教えてもらえますか?

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

c++ - glGenFramebuffersまたはglGenFramebuffersEXT?

よくわかりません。WindowsのOpenGL1.xでフレームバッファオブジェクト拡張機能(FBO)を使用するには、次のうちどれを使用しますか?

異なるハードウェアを使用しているユーザーからのレポートからわかる限り、一部のドライバーは、どちらも、2つのうちの一方、または両方のすべての組み合わせをサポートしています。

どちらを使用するのが適切ですか?一部のドライバーは実際に一方をサポートしていますが、もう一方はサポートしていませんか?見つからない場合は、一方から他方にフォールバックしようとするのは正しいですか?


編集: ATIRadeonカードとその周辺のコードでまだ深刻な問題があります。このコード(www.scirra.com)を使用して商用エディターを起動しました。FBOを使用するために使用するコードの組み合わせに関係なく、ユーザーのいくつかの異なる組み合わせでは、何も表示されない(つまり、何もレンダリングされない)と報告されます。

これは、ARB関数(サフィックスなし)を使用するか、EXTサフィックス関数を使用するかを検出するコードです。これは起動時に実行されます:

その後、起動時に、テクスチャへのレンダリングを見越してFBOを作成します。

私はこのコードの多くのバリエーションを経験してきましたが、すべての人にそれを機能させることはできません。何もレンダリングされないと報告するユーザーのグループは常に存在します。ATIRadeonHDカードは特に問題があるようです。ドライバーのバグが関係しているかどうかはわかりませんが、上記のコードが誤った仮定をしている可能性が高いと思います。

500 repの報奨金があり、何が問題なのかを知っている人には無料のビジネスライセンスを送ります。(99ポンド相当)


編集2:いくつかの詳細。これが失敗することが知られているカードのリストは次のとおりです。

ATI Mobility Radeon HD 5650

ATI Radeon X1600 Pro

ATI Mobility Radeon HD 4200

テクスチャへのレンダリングは実際には行われません。呼び出しだけで、これらのカードでのレンダリングがglGenFramebuffers完全に停止するようです。FBOの作成を、テクスチャへのレンダリングが実際に行われる最初の時間まで延期することもできますが、おそらく、レンダリングが再び停止するだけです。

GLEWを使用することはできますが、コードで使用できないのは何ですか?ソースを調べたところ、同様のリストを使用しているようですwglGetProcAddress。私の場合、メソッドが返されます。そうでない場合はglGenFramebuffersNULLになり、クラッシュします。何か案は...?

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

lwjgl - シーンをFBOにレンダリングしようとすると白が返されます

これが私がやろうとしていることです。画像をタイルとして使用して動的に生成された地形を持つLWJGLを使用して2Dゲームを作成しようとしています。正常に動作しますが、ズームしようとすると、タイルの端に暗い色合いが表示され、タイルの間に余分なピクセルが表示されます。ズーム前後のスクリーンショットは次のとおりです。

ズームの前後のスクリーンショット:http://postimage.org/image/rhuc9744/

私は見てみましたが、インターネットで少し集めたところから、ズームがピクセル精度の問題を引き起こしていて、ブレンド後に悪化していることが要点だと思います。タイル間でいくつかのピクセルを重ねることができるというブログを見ましたが、複雑すぎるようです。私はすべてのブレンドオプションを試しましたが、どれも機能しませんでした。だから私は、すべてのタイルをバッファ、FBOにレンダリングし、それを1つの大きなテクスチャとして適用する必要があると考えました。したがって、ズームしても、すべてが1つの巨大な画像になるため、暗いエッジは表示されません。だから私はFBOに関する多くのチュートリアルを読みましたが、それらのすべてではないにしてもほとんどが3Dを対象としており、実際に作業を開始しました。問題は、2Dオルソに適用する場合です。コードが壊れて、私が得るのは白いボックスだけです。私はこの問題に何日も立ち往生していて、グーグルを使って答えを見つけることができないようです。ここ'

このコードは、resource / lamp.pngに画像をロードします。これは任意の.pngファイルであり、FBOにレンダリングしてから、2Dクワッドのテクスチャとして適用します。何らかの理由で、FBOをテクスチャとしてバインドしようとすると、白い空白のクワッドしか表示されません。FBOに正しくレンダリングされていないのか、正しくバインドされていないのかわかりません。draw()メソッドをチェックして、私が何について話しているのかを知ることができます。私が言ったように、私はこの問題で一日立ち往生しているので、どんな助けでも大歓迎です。

resources / lamp.png:http ://s3.postimage.org/rhpdn5ms/lamp.png?noCache=1315464566

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

opengl - glslで深度を処理する方法

openGLのFBOと深度に問題があります。gバッファーに書き込むシェーダーに、射影、ビュー、モデルの行列を渡します。FBOのバインドを解除してgl_FragColorに書き込むと、シーンが正常に表示されます。しかし、gl_FragData [0]に書き込んでから、付随するテクスチャを画面に配置されたクワッドに書き込むと、オブジェクトは深度ではなく逆の順序で処理されて描画されます...最初に処理されたオブジェクトから後に処理されたオブジェクトまで見ることができます。誰かが同じ問題を抱えていて、彼らは修正を知っていますか?または、頂点シェーダーから深度値を読み取り、現在の深度をクエリし、比較に応じて深度バッファーに書き込む、つまりフラグメントシェーダーで手動で操作を処理する構文を提供することもできます。

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

opengl - OpenGLで画面に表示せずにフレームバッファにレンダリングする方法は?

画面に表示せずにオフラインでレンダリングできることは知っていました。

どうしよう、たぶん

非表示のウィンドウを作成して描画します。

レンダリング時に特定の fbo を使用できますか?

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

c++ - OpenGL Render to Texture(FBO)が機能しない

FBOを使用してテクスチャにレンダリングしてからテクスチャを表示しようとしていますが、取得できるのは黒い長方形だけです。私のコードは次のとおりです。

初期化:

FBOにレンダリング:

テクスチャを使用します(静的テクスチャを使用するだけで、以下のコードが機能するため、問題はおそらく上記のコードにあります):

問題を見つけるのを手伝ってもらえますか?

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

opengl - テクスチャ内の初期化されていない/予約されていないGPUメモリ、OpenGL

(これは実際にはgamedevからのクロスポストですが、皆さんも役立つかもしれないと思いました!)

編集:オーバーレイの意味について詳しく説明しました。少し眠った後、glTexImage2Dへのポインタとしてnullを使用しているため、glGenerateMipmapsの呼び出しは役に立たないことがわかりました。

OpenGL 3.3、Ubuntu 11.04、nVidiaドライバー280.13、GeForceGT240。

遅延シェーダーを作成していて、画面の下部にある小さなオーバーレイにGバッファーを表示したいと考えています。この場合のオーバーレイは、z検定がなく、テクスチャスクリーンで整列されたクワッドであり、最後にレンダリングされることを意味します。

フルウィンドウでGバッファ(FBOテクスチャ)を(一度に1つずつ)レンダリングすると、正しく表示されます。これらのオーバーレイにレンダリングすると、ゴミが発生します(静的干渉としてランダムなGPUメモリのように見えますが、実行ごとに異なり、場合によっては鮮明な画像になります)。

たとえばファイルから別のテクスチャを作成すると、オーバーレイにゴミが表示されないため、コードは問題ありません。誰かが理由を説明できますか?GバッファのテクスチャにglGenerateMipmapを使用しました。

これでは十分な情報ではないかもしれませんが、これから始めます。関連情報についてはお問い合わせください。問題はFBOレンダリングとミップマップに関連している可能性がありますか?確かに私のコードは予約されていない/初期化されていないメモリを表示したいのですが、理由はわかりません。 以下の4つのテクスチャには、ゴミ箱のデータが含まれています。


フルウィンドウの緑色の画像は、GPUメモリが太いためにGPUメモリを節約するための解像度(256 * 256)での、照明段階からの現在の結果です。また、マテリアルシェーダー(Gバッファーの生成)では、「out vec4fragment [3]」を使用しており、テクスチャはさまざまな内部形式になっています。それは問題になる可能性がありますか?

PS。ライトは(-30,0,0)と(30,0,0)にありますが、「より近い」ようです。それは精度の問題になる可能性がありますか?法線にはGL_RGBA16F、位置にはGL_RGBA32F、深さにはGL_DEPTH_COMPONENT24、アルベドにはGL_RGBAを使用します(はい、膨大な無駄ですが、後で最適化します)。

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

opengl - VBO をバインドしない Opengl、DrawArrays

カスタム頂点シェーダーを使用してポイントの配列をレンダリングしています。シェーダーは次のようになります。

したがって、必要なのは頂点 ID だけです。しかし、私は多くの頂点が必要であり、それらのために偽の VBO を保存したくありません (約 16 MB のメモリが必要です)。

VBO をバインドせずにコードを実行しようとしました。できます。したがって、私のレンダリングは次のようになります。

しかし、VBO をバインドせずにレンダリングしても安全だと確信できますか?

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

ios - iOS5はGL_STENCIL_INDEXとGL_STENCIL_INDEX8の両方をサポートしていますか?

次のコードで:

を使用GL_STENCIL_INDEXすると、GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENTエラーが発生します。を使用GL_STENCIL_INDEX8すると、GL_FRAMEBUFFER_UNSUPPORTEDエラーが発生します。どちらも最後のglFramebufferRenderbuffer()関数が原因で、ステンシルバッファーをFBOにバインドする必要があります。

さらに、GL_RENDERBUFFER_STENCIL_SIZE値を確認すると、で正しい値(8)が得られますが、。GL_STENCIL_INDEX8で0が得られGL_STENCIL_INDEXます。

これでは、ステンシルバッファを備えた機能的で完全なFBOを取得できません。それはGL_STENCIL_INDEX?ここではどちらを使用する必要がありますか?

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

objective-c - 2 つの FBO 間のピンポン レンダリングは、最初のフレームの後に失敗します。

2 つの FBO を作成し、ピンポン レンダリングを実装しようとしています。しかし、最初のフレームしか正しく動作しません。ライフ ゲームをシミュレートしようとしていますが、最初のフレームの後、黒い画面しか表示されません。チェックするのを手伝ってくれませんか?私はこの問題に何時間も費やしました。

編集

たぶん、私は明確に説明していませんでした。実際には、textureB をテクスチャとして使用し、それを textureA にレンダリングしてから、textureA を使用して画面にレンダリングし、その逆も同様です。

編集 textureB である最初のフレームが表示されます。フラグメントシェーダーを通過すると黒くなります。最初は、フラグメントシェーダーを疑って、黒を白に、白を黒に戻すだけに変更しました。それでも真っ黒になります。

fbo とテクスチャを設定する

レンダー ループ

フラグメントシェーダー