問題タブ [transform-feedback]

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

c++ - OpenGL で変換フィードバックを使用して GL_SEPARATE_ATTRIBS を使用する場合、複数のバッファを読み戻すにはどうすればよいですか?

GL_INTERLEAVED_ATTRIBS のように 1 つだけではなく GL_SEPARATE_ATTRIBS を使用する場合、複数の変換フィードバック バッファを読み戻すにはどうすればよいですか? この例では、2 つのバッファーをセットアップし、それらを変換フィードバック用にセットアップします。

単一のバッファを使用すると、 onGL_INTERLEAVED_ATTRIBSを呼び出すことで単一のバッファを読み戻すことができます。glGetBufferSubDataGL_TRANSFORM_FEEDBACK_BUFFER

buffer0ただし、両方のバッファを読み戻し、 ofでbuffer1インデックス付け(0,1)し たいことを OpenGL に伝えるにはどうすればよいですか?glBindBufferBaseGL_TRANSFORM_FEEDBACK_BUFFER

私が見つけたすべてのチュートリアルでは、常にこれを単一のバッファーに単純化GL_INTERLEAVED_ATTRIBSし、VAO 入力レイアウトに従って TF 出力を一致させるために個別のバッファーを使用するか、単にバッファー データをまったく読み戻さないことが可能であることを説明しています。

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

opengl - glDrawTransformFeedback がバッファに書き込まれない

トランスフォーム機能を使用してパーティクル システムを作成しようとしています。そのため、2 つのトランスフォーム バッファと 2 つの配列バッファがあり、切り替えにはピンポンを使用します。

私のシェーダーはシンプルで、ソースの位置を追加し続けるだけです。

glDrawTransformFeedback() を使用すると、2 つのバッファは変更されずに元のデータを保持します。しかし、glDrawArrays() に切り替えると、ピンポンが機能し、位置の値が増加し続けます。

初期コード

変換を実行

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

opengl - 複数の出力バッファをバインドする TransformFeedback

GL の TransformFeedback 機能を使用しています。単一のバッファの代わりに複数の出力バッファをバインドすることは可能ですか? 2 つの出力変数があると仮定します。

そして、それらのために 2 つのバッファ オブジェクトを生成しました。

とにバインドid0するにはどうすればよいですか?out0id1out1

glBindBuffersBaseandを試しましたglBindBufferRangeが、どちらもそうではないようです。

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

c++ - 動的ジオメトリを使用した OpenGL トランスフォーム フィードバック

現在、ジオメトリ シェーダーでトランスフォーム フィードバックを試しています。Geometry Shader は Triangle を取り、そこから Prism を作成し、その上に Tetraeder を配置します (オベリスクのように考えてください。ただし、4 つの側面ではなく 3 つの側面しかありません)。

トランスフォーム フィードバックを 1 回使用すると、正しい結果が得られます。ただし、トランスフォーム フィードバックを使用して追加のジオメトリを作成したいと考えていました。Tetraeder の三角形ごとにジオメトリ シェーダー プロセスを実行したいと考えました。

最初の合格後の結果 最初の合格後の結果

2 番目のパスの後の結果 2 回目のパス後の結果 したがって、2 番目のパスで黒い部分が無限大になる代わりに、左右に見える別の枝がカメラに向かっているはずです。

ここで何が間違っていますか?2 つの Vertex Buffer オブジェクトの常に増加するデータ サイズを処理する方法がわかりません。おそらくそこで何か間違ったことをしているのでしょう。助けていただければ幸いです。

メイン ウィンドウ ループの前にフィードバックを変換します。

メイン ウィンドウのループ中にフィードバックを変換します。

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

c++ - トランスフォーム フィードバック ベースのピッキングが遅いですか?

transform feedbackを使用してピッキング ルーチンを実装しようとしています。現在は正常に動作しますが、速度が非常に遅い (より遅いGL_SELECT) ことが問題です。

現在の仕組み:

  1. glBindBufferRange()オフセット (最初は 0)を使用して TBO をバインドします。
  2. glBufferSubData()(ピッキングが正しいことを確認するために)を使用してメモリ(TFの変数構造のサイズ)をリセットします。主な問題はここにあります。
  3. ピッキング レイとの交差をチェックするジオメトリ シェーダーでオブジェクトを描画します。交差が見つかった場合、シェーダーはこれを TF 変数に書き込みます (最初は交差がありません。手順 2 を参照してください)。
  4. オフセットを増やして、次のオブジェクトでステップ 1 に進みます。

最後に、各オブジェクトのピッキング データの配列を取得します。

glBufferSubData()問題は、各反復での呼び出しを回避する方法です。可能な解決策(ただし、それらを実装する方法はわかりません)は次のとおりです。

  • 変化する TF を 1 つだけ書き込みます。だから他人をリセットする必要はない
  • 他の方法でデータをリセットする

何か案は?