問題タブ [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.
opengl - Pixel Buffer オブジェクトを使用して GPU メモリから 3D テクスチャを読み取る方法
フラグメント シェーダー内から 3D テクスチャにデータを書き込んでいますが、そのデータをシステム メモリに非同期で読み戻す必要があります。バッファ オブジェクトへのパッキング操作を非同期的に開始する唯一の手段はglReadPixels()
、NULL
ポインタを使用して呼び出すことのようです。しかし、この関数は、読み返す領域を定義する四角形を渡す必要があります。PBO を使用するときにこれらのパラメーターが無視されるかどうかはわかりませんが、そうではないと思います。この場合、3D テクスチャ全体を取得するために、この関数に何を渡せばよいかわかりません。個々のスライスを読み戻さなければならない場合でも (これはばかげた IMO のようなものです)、どのスライスから読み取るかを OpenGL と通信する方法がわかりません。何か不足していますか?
ところで、すべてのスライスに個別の 2D テクスチャを使用することもできますが、間違っていなければ (3D-) ミップマッピングが台無しになります。結果の 3D テクスチャで関心のある領域を効率的に見つけるために、3D ミップマップを使用したいと考えました。
PS 最適化されていないタグで申し訳ありません。新しいタグを作成することは許可されていないため、以前は誰も 3D テクスチャについて質問していなかったようです...
ios - テクスチャへのレンダリングと CAEAGLLayer に基づくビューへのレンダリング?
私は OpenGL 環境について非常に大まかに把握しているので、これは私が理解しようとしているものです。これら 2 つのスタイルのレンダリングの違いは何なのか、誰かが簡単に説明できますか? 主に、テクスチャにレンダリングすることの意味を理解したいのですが、それを選択するのが適切なのはいつですか?
java - OpenGL es: フレーム バッファを介してテクスチャにレンダリングすると、1 つの色しかレンダリングされない
Android ゲームにモーション ブラー効果を実装しようとしています。
多くの調査の結果、フレーム バッファ オブジェクトを使用して前のフレームをテクスチャとして保存し、現在のフレームの上にレンダリングするのが最善の方法であることがわかりました。そのようなことを行う方法に関するいくつかの素晴らしいチュートリアルを見て、基本的にテクスチャでシーンをレンダリングし、テクスチャをデフォルトのフレームバッファに描画するこのコードになりました。
しかし、テクスチャには 1 つの色しかありません。たとえば、緑色の爆発テクスチャが緑色のみの場合、
これはレンダー バッファまたはテクスチャ パラメータに問題があると考えられます。
ここに私のコードがあります
java - 同じサーフェスに複数のテクスチャをマッピングする
円柱をレンダリングし、2 つの異なるテクスチャを上面と底面にマッピングしています。
両方のテクスチャは、次の方法でロードされます。
テクスチャにレンダリングしようとすると問題が発生します (この最初の 2 つのテクスチャとは関係のない空白のテクスチャ)。
このコードが実行されるとすぐに、円柱の上部にマップされたテクスチャが消え、すべての上部が黒くなります...
なんで?
Ps: 私の仕事は、この 3 番目にレンダリングされたテクスチャを、既存のものの上に、円柱の上部にマッピングすることです..
java - OpenGL ES: テクスチャの使用: テクスチャ イメージの代わりに空白の白
私は Android プラットフォームでコーディングしています。三角形にテクスチャ (Assets フォルダーから画像を読み込む) を使用しようとしています。私のアプリが実行されると、三角形の空白の白になります(私が望むテクスチャではありません)。
画像は2の累乗でなければならないという他の情報源を読みました。確認しましたが、私のイメージは 2 のべき乗です。(128×128)。それが頭を悩ませる理由です。
ここに私のコードがあります: (onDrawFrame
メソッドに表示されるメインコード。レンダリングに使用するコードが含まれています)
私のコードは単純な例です。デバッグがあり、すべてが真実です。(例: イメージの読み込みに成功)。しかし、OpenGL アプリをデバッグする方法がわかりません。(つまり、デバッグ時に変数のパラメーターを表示できますが、OpenGLはCanvasよりも複雑すぎるため、それがどのようになるかわかりません.1行のコードを使用するだけで結果が得られます:))
手伝ってくれてありがとう :)
opengl - テクスチャにレンダリングすると、テクスチャが完全に表示されません
基本的にテクスチャにレンダリングすると、テクスチャの一部が失われたように見えます。
左から順に、三角形と最初のクワッドは通常どおりにレンダリングされますがdisplay()
、右側の最後のクワッドと下のクワッドはそれぞれ、テクスチャがマッピングされた状態でレンダリングされたクワッドと、テクスチャ自体の内部を示すクワッドです。
基本的に赤い点は見えず、青い点だけが見えます。なんで?
ios - オフスクリーン レンダリングされたテクスチャは、画面上に空の四角形をレンダリングします
OpenGL ES 1.1 テクスチャを作成しようとしていますが、塗りつぶしはレンダリングされたコンテンツです。
テクスチャの準備:
シーンへのテクスチャのレンダリング:
完全なソース コードは Bitbucket で入手できます: https://bitbucket.org/amjaliks/gl2/src/66ee4932e212/GL2/GL2View.m
他のコンテンツは正しくレンダリングされます。問題はこのテクスチャのみです。白い長方形としてレンダリングされます。
私は多くの例を研究しましたが、何が間違っているのかまだわかりません。何が欠けている?
更新 1:バインドされている間に設定glClearColor()
して呼び出すと、これらの変更がテクスチャに保存されることに気付きました。したがって、および/または関連するものに何か問題があります。glClear()
texFrambuffer
glDrawArrays()
マトリックス モードとプロジェクションを特に自分用に設定する必要がありますtexFrambuffer
か?
更新 2:glCopyTexImage2D
「メイン」フレームバッファからテクスチャにコンテンツをコピーするためにも使用しようとしました。
Bitbucket で入手可能な完全なソース コード: https://bitbucket.org/amjaliks/gl2/src/b3339661650e/GL2/GL2View.m
結果は同じです。塗りつぶされた四角形のみ。私のマトリックスに間違いなく問題があるようです。
opengl - OpenGL render-to-texture-via-FBO -- 正しくない表示と通常のテクスチャ
テクスチャにバインドされたオフスクリーン フレーム バッファ オブジェクトへのオフスクリーン レンダリングは非常に簡単なはずですが、頭が回らない問題が発生しています。
私の完全なサンプル プログラム (今のところ 2D のみ!) は次のとおりです。
いくつかの説明については、以下を参照してください。
rgba テクスチャ オブジェクト 512x512 を作成し、FBO にバインドします。この時点では深度やその他のレンダー バッファーは必要なく、厳密には 2D です。
次の非常に単純なシェーダーがこのテクスチャにレンダリングされます。
頂点シェーダー:
aPos では、クワッドの 4 つの xy 座標 (-1、-1 :: 1、-1 :: 1、1 :: -1、1) を含む VBO を取得します。
したがって、フレームバッファの解像度は理論的には 512x512 である必要がありますが、シェーダーはその「テクスチャ」を「フル (オフ) スクリーン クワッド」にレンダリングし、GLs -1..1 座標パラダイムに従います。
フラグメント シェーダー:
そのため、0 から 1 の間の x/y に応じて、赤が 0.25 に固定され、緑/青で完全に不透明な色が設定されます。
この時点で、512x512 のテクスチャがレンダリングされ、-1..1 フル (オフ) スクリーン クワッドのみが表示され、0..1 から緑/青のフラグメント シェーディングが行われると仮定しています。
これが私のオフスクリーン設定です。画面上には、4 つの xyz 座標 { -1, -1, 1 ::: 1, -1, 1 ::: 1, 1, 1 ::: -1, 1, 1}。繰り返しますが、今のところこれは 2D なので行列はなく、z は常に 1 です。
このクワッドは別のシェーダーによって描画され、テキスト GL-101 スタイルの特定のテクスチャを単純にレンダリングします。上にリンクされている私のサンプル プログラムでは、単純なブール値のトグル doRtt があります。これが false (デフォルト) の場合、render-to-texture はまったく実行されず、このシェーダーは単に現在のディレクトリの texture.jpg を使用していることを示しています。
この doRtt=false モードは、画面上の 2 番目のクアッド レンダラーが現在の要件に対して「正しい」ことを示しており、必要に応じてテクスチャリングを実行します。それ以外の場合は、テクスチャ フィルタリングやミップマッピングなしでスケーリングします。
したがって、ウィンドウ (およびビュー ポート) のサイズがどのように変更されても、単一のテクスチャが水平方向に 2 回、垂直方向に 2 回繰り返されるフルスクリーン クワッドが常に表示されます。
ここで、doRtt=true を使用すると、2 番目のシェーダーは引き続き機能しますが、テクスチャが完全に正しくスケーリングまたは描画されることはありません。残念ながら、「ねえ、この FBO をディスクに保存してデバッグ目的」。
RTT シェーダーは一部のレンダリングを実行します (または完全なレンダリングで、画面外で何が起こっているのかわかりません...)。非常に単純な RTT フラグメント シェーダーから期待されるすべての色が実際に表示されるわけではありません。
(A) いずれか: 512x512 テクスチャは正しく作成されていますが、私のコードでは正しくマッピングされていません (しかし、doRtt=false を使用すると、まったく同じ単純な textured-quad-shader を使用して特定の texture.jpg ファイルが正常に表示されるのはなぜですか?)
(B) または: 512x512 のテクスチャが正しくレンダリングされず、ウィンドウの解像度に応じて rtt フラグ シェーダが出力を変更しますが、なぜでしょうか? オフスクリーン クワッドは常に x と y に対して -1..1 であり、頂点シェーダーは常にこれをフラグメント座標 0..1 にマップし、RTT テクスチャはこの簡単なテストのために常に 512x512 のままです!
オフスクリーンのクワッドとオンスクリーンのクワッドの両方が座標を変更することはなく、常に「フルスクリーン」(両方の次元で -1..1) であることに注意してください。
繰り返しますが、これは非常に単純なはずです。一体何が欠けているのですか?
仕様: OpenGL 4.2 (ただし、コードには明らかに 4.2 の機能は必要ありません!)、Nvidia Quadro 5010M、openSuse 12.1 64 ビット、Golang Weekly 2012 年 2 月 22 日。
objective-c - OpenGLESでのモーションブラーの実装
私はOpenGLES1.1(IOS用)テクスチャリングの初心者ですが、モーションブラーの効果を作成するのに問題があります。グーグル中に、シーンをさまざまな時点でいくつかのテクスチャにレンダリングしてから、これらすべてのテクスチャをさまざまなアルファ値で画面に描画する必要があることがわかりました。しかし、問題は、これらすべてを実装する方法がわからないことです!つまり、私の質問は次のとおりです。
- 画面に2Dテクスチャを描画するにはどうすればよいですか?正方形を作ってその上にテクスチャを配置する必要がありますか?それとも、画面に直接テクスチャを描画する方法がありますか?
- 異なるアルファ値で画面上に複数のテクスチャを(次々に)描画するにはどうすればよいですか?
私はすでにいくつかのアイデアを思いついたが、それらが正しいかどうかはわからない。前もって感謝します!
android - GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT が表示されるのはなぜですか?
Android 向けのゲームを開発していますが、ターゲット デバイスが少し遅いです。これらのデバイスでは、色が異なる方法で表示されます。場合によっては、赤が非常に不透明になります。これに対する解決策として、デバイスに応じてシェーダーのopengl正しい色を作成しました。SD からテクスチャをロードし、レンダー ツー テクスチャを実行してシェーダーを適用し、最後にエフェクトなしでテクスチャを削除します。これは、テクスチャのロードごとに 1 回行われます。問題は、ある時点でコードのテクスチャへのレンダリングが失敗し始めることです。
これは正常に動作しますが、特定の時点で失敗し始め、常に GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT を返します。
失敗し始めるのでわかりません。
更新: ロードされたすべてのテクスチャに対して 1 つの FBO のみを使用するようになりましたが、Android デバイスで新しいエラーが発生します: