問題タブ [render-to-texture]

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 に答える
2102 参照

opengl - 1x1 ミップマップ レベルのみが要求されている場合でも、glGetTexImage がすべてのミップマップ テクスチャを転送するのはなぜですか?

FBO で浮動小数点テクスチャにレンダリングし、CPU 上のそのテクスチャのすべてのピクセルの平均値が必要です。したがって、ミップマッピングを使用して平均を計算して 1x1 ミップマップにするのは非常に便利だと思いました。CPU の計算時間を節約し、1024x1024 ピクセルの代わりに 1 ピクセルを CPU に転送するだけでよいからです。

だから私はこの行を使用します:

glGetTexImage(GL_TEXTURE_2D, variableHighestMipMapLevel, GL_RGBA, GL_FLOAT, fPixel);

ただし、常に 1x1 ピクセルのサイズである最高のミップマップ レベルのみを具体的に要求しているにもかかわらず、そのコード行が完了するまでにかかる時間は、テクスチャのレベル 0 ミップマップのサイズによって異なります。これは私には意味がありません。たとえば、私のテストでは、この行は 1024x1024 のベース テクスチャの場合、32x32 のベース テクスチャの場合よりも約 12 倍長くかかります。

fPixel の結果は正しく、必要なピクセルのみが含まれていますが、時間はテクスチャ セット全体が転送されたことを明確に示しています。これは、CPU への転送が明らかにボトルネックであるため、私の主な理由を殺します。

私は Win7 と opengl を使用し、これを ATI Radeon HD 4800 と GeForce 8800 GTS でテストしました。

誰もその問題について何か知っていますか、または最高のミマップの1ピクセルのみをCPUに転送するスマートな方法を持っていますか?

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

c++ - OpenGLでの動的テクスチャの作成とブレンド

球をテクスチャにレンダリングし(フレームバッファオブジェクト(FBO)を使用して実行)、そのテクスチャをバックバッファとアルファブレンドする必要があります。これまでのところ、すべてのフレームの先頭でテクスチャをクリアする以外は、テクスチャを使用して処理を行っていません。

私のシーンは、空の空間にある惑星だけで構成されていると言えます。球は、惑星の隣または周囲に表示されます(今のところ月のようなものです)。球をバックバッファに直接レンダリングすると、正しく表示されます。しかし、テクスチャにレンダリングしてからそのテクスチャをバックバッファとブレンドする中間ステップを実行すると、球は惑星の前にある場合にのみ表示され、前にない部分は単に「切り取られます」 ":

惑星の端で切り取られた球

glutSolidSphereFBOにバインドされたRGBA8フルスクリーンテクスチャを使用して球をレンダリングし、すべての球ピクセルが1.0のアルファ値を受け取るようにします。次に、テクスチャをフラグメントシェーダープログラムに渡し、このコードを使用して、アルファブレンディング中にフルスクリーンクワッド(テクスチャがマップされている)をバックバッファーにレンダリングします。

これはシェーダーコードです(Cgで記述されたFXファイルから取得):

これがデプスバッファの問題なのかアルファブレンディングの問題なのかさえわかりません。デプステストの有効化と無効化(FBOにデプスバッファを接続)とアルファブレンディングの組み合わせをたくさん試しました。

編集:私は空白のフルスクリーンクワッドをバックバッファーにまっすぐにレンダリングしようとしましたが、それでも惑星の端の周りでトリミングされました。何らかの理由で、クワッドをレンダリングするための深度テストを有効にする(つまり、線glDisable(GL_DEPTH_TEST)とを削除するglEnable(GL_DEPTH_TEST) in the code above)ことで問題が解消されましたが、惑星と球以外はすべて白く表示されます。

白い間違った白い背景を持つ球

テクスチャのアルファチャネルが球以外のすべてのピクセルで0であることを確認した(そして確認できた)ので、どこに白さが導入されるのかわかりません。(深度テストを有効にするとこの効果がある理由の説明にも興味があります。)

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

directx-11 - directx 11 で 1 回のパスで複数のテクスチャにレンダリングする

C++ directx 11 SDK を使用して、1 つのパスで 2 つのテクスチャにレンダリングしようとしています。1 つのテクスチャに結果イメージの各ピクセルの色 (3D シーンをレンダリングするときに画面に通常表示されるもの) を含め、別のテクスチャに各ピクセルの法線と深さ (法線用に 3 つの float と 1 つの float) を含める必要があります。深さのため)。今考えられるのは、2 つのレンダリング ターゲットを作成し、最初のパスを色としてレンダリングし、2 番目のパスで法線と深度を各レンダリング ターゲットにそれぞれレンダリングすることです。ただし、最初のパスで各ピクセルの色、法線、深度の情報を取得できるため、これは時間の無駄に思えます。ピクセル シェーダーで 2 つのテクスチャを出力する方法はありますか?

どんな助けでも大歓迎です。

PS ピクセル シェーダーの RWTexture2D または RWStructuredBuffer に沿って何かを考えています。ちょっとした背景: 計算シェーダーでさらに処理するには、2 つの画像が必要です。これにより、同期に関する副次的な問題が生じます。ピクセル シェーダーは (計算シェーダーとは異なり) 各ピクセルを一度に 1 つずつ書き込むため、ピクセル シェーダーが終了したことをどのように認識し、計算シェーダーに画像の後処理を開始するように指示するのでしょうか?

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

opengl - lwjglとテクスチャにレンダリング

テクスチャにレンダリングしてから、そのテクスチャをフルスクリーンのクワッドに描画できるようにする必要があります。lwjglチュートリアルを露骨にコピーすることで、テクスチャを付けて移動するクワッドを作成できましたが、テクスチャにレンダリングすることはできません。

テクスチャにレンダリングするための行を追加したコードのセクションは次のとおりです。

FBOのセットアップ//////////これは、フレームバッファスタッフのコードを追加した場所です//////////////

レンダリングコードは次のとおりです。//////////これらの行は新しく、フレームバッファのレンダーに追加されました///////// GL30.glBindFramebuffer(GL30.GL_FRAMEBUFFER、fboID); GL11.glViewport(0、0、WIDTH、HEIGHT); /////////これは元のレンダサイクルコードです。これをFBOに移動します///////GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);

このコードを実行すると、約1秒間黒い長方形が表示され、コンソールからフレームバッファーが完了したことが通知され、レンダリングサイクルでの無効な操作に関するopenGLエラーが発生し、クラッシュします。問題はフルスクリーンのクアッドコードのどこかにあると思いますが、正しく行う方法がわかりません。画面にレンダリングするための新しいシェーダープログラムを作成する必要がありますか?glBegin(GL_QUADS)を削除して、頂点バッファーを使用する必要がありますか?

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

iphone - OpenGL ES-glReadPixels vs TextureCached

OpenGLES2.0のフレームバッファからピクセルデータを読み取る必要があります。これはglReadPixelsで簡単に実行できることは知っていますが、iOS 5以降では、TextureCachedオブジェクトを使用してより高速に読み取ることができます。

私はBradLarsonによって提案されたソリューションを実装しました(私はいつも彼に感謝します、彼は多くの知識を共有するコミュニティのために素晴らしい仕事をしていると思います...)iPhone OpenGLES2.0のglReadPixelsのより速い代替手段

すべてが機能しているようです。適切なデータを取得し、glReadPixelsと比較すると、データは同じです。私の問題は、この2つの可能なソリューションのパフォーマンスを測定したときに発生しました(データの取得にかかる時間)。

ここに私の結果:

(フレームバッファとテクスチャサイズ320x480ピクセル)

GPUImageProcessingDemo [1252:707] glReadPixels 2750 us

GPUImageProcessingDemo [1252:707]テクスチャ読み取り1276 us

GPUImageProcessingDemo [1252:707] glReadPixels 2443 us

GPUImageProcessingDemo [1252:707]テクスチャ読み取り1263 us

GPUImageProcessingDemo [1252:707] glReadPixels 2494 us

GPUImageProcessingDemo [1252:707]テクスチャ読み取り1375 us

これは、glReadPixelsを使用するときに必要な時間のほぼ半分であるため、非常に興味深いようです。問題は、テクスチャサイズを少し大きいものに変更すると、次の結果が得られることです。

(フレームバッファとテクスチャサイズ480x620ピクセル)

GPUImageProcessingDemo [1077:707] glReadPixels 2407 us

GPUImageProcessingDemo [1077:707]テクスチャ読み取り2842 us

GPUImageProcessingDemo [1077:707] glReadPixels 2392 us

GPUImageProcessingDemo [1077:707]テクスチャ読み取り3040 us

GPUImageProcessingDemo [1077:707] glReadPixels 2224 us

これは意味がありますか?それとも、常により良い結果が得られると期待すべきですか?

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

c++ - glReadPixels()を使用してFBOからサイズ変更された画像を返す方法は?

すぐに:バッファイメージのサイズを変更してから、ピクセルをファイルなどに保存するためにピクセルを返す簡単な方法が必要です。

現在、私は最初にglReadPixels()を使用し、次に自分でピクセルを調べて、自分のサイズ変更関数でピクセルのサイズを変更しています。

このサイズ変更を高速化する方法はありますか?たとえば、OpenGLに作業を任せることはできますか?miplevelとmipmappingを有効にしてglGetTexImage()を使用できると思いますが、前に気付いたように、その関数はGFXカードでバグがあり、使用できません。

GPUメモリを節約するために必要なのは、1から4までの1つのmiplevelだけですが、すべてではありません。では、必要なサイズのミップレベルを1つだけ生成することは可能ですか?

注:ステンシルテストにはピクセル精度のレンダリングが必要なため、マルチサンプリングを使用できるとは思いません。マルチサンプリングでレンダリングすると、ピクセルがぼやけ、ステンシルテストとマスキングで失敗し、結果が正しくなくなります(AFAIK) 。編集:色(RGBA)バッファーのみをスケーリングしたい!

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

opengl - 整数テクスチャをフレーム バッファにアタッチする

GL_R32UI内部フォーマットのテクスチャをフレーム バッファにアタッチして、ID バッファとして使用しようとしています。しかし、それが唯一の添付ファイルであっても、glCheckFramebufferStatus思いつき続けます。GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT

GL_R32UIOpenGL 4.2 の仕様では、OpenGL 実装がフレーム バッファにアタッチされたときにサポートしなければならない形式の 1 つと記載されているように見えるため、これは私にとって非常に奇妙です。これはドライバーのバグだと思います。私は正しいですか、それとも私が見落としているものを誰かに見せてもらえますか?

0 投票する
3 に答える
2949 参照

three.js - THREE.js:THREE.WebGLRenderTargetからデータを取得します

ATHREE.Textureはマテリアルのマップとして使用でき、「イメージ」と呼ばれるプロパティがあります。ATHREE.WebGLRenderTargetはマテリアルのマップとして使用できますが、「イメージ」と呼ばれるプロパティはありません。

テクスチャデータをから取得するにはどうすればよいWebGLRenderTargetですか?それをファイルに保存したい(または、それが不可能な場合は、バイト配列として)。

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

iphone - iphone - Cocos2d パズルゲーム、ピース位置の解き方は?

cocos2d を使用した最初のアプリで助けが必要です。パズル ゲームを開発しようとしています。ゲームには画像ピースがあり、背景が透明です。これらのピースを正しい場所/位置に合わせる必要があります。私の問題は、画像上のピースの正確な位置/場所を見つける方法がわからないことです。誰でも私を助けてくれますか?

このようなゲームを作ろうとしている : Animal Puzzle

とパズルの画像とこのようなピース: パズルの画像とピース

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

opengl - キューブ マップ テクスチャを含む glFramebufferTexture2D

キューブ マップ テクスチャで Render to Texture コンセプトを使用しようとしていますが、描画呼び出しでテクスチャがジオメトリに適用されません。これが私のコードです

フレームバッファのバインドが完了しているかどうかを確認しました。また、 draw_cube() は、期待どおりにジオメトリを正しく描画します。FBO を削除して glteximage2D() にデータを提供すると、cubemap テクスチャが draw() 呼び出しでジオメトリに正しく適用されます。幅の高さは、draw_cube 呼び出しで設定されたビューポートと同じです。

上記のコードの何が問題になっていますか?