問題タブ [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.
c++ - OpenGL で変換フィードバックを使用して GL_SEPARATE_ATTRIBS を使用する場合、複数のバッファを読み戻すにはどうすればよいですか?
GL_INTERLEAVED_ATTRIBS のように 1 つだけではなく GL_SEPARATE_ATTRIBS を使用する場合、複数の変換フィードバック バッファを読み戻すにはどうすればよいですか? この例では、2 つのバッファーをセットアップし、それらを変換フィードバック用にセットアップします。
単一のバッファを使用すると、 onGL_INTERLEAVED_ATTRIBS
を呼び出すことで単一のバッファを読み戻すことができます。glGetBufferSubData
GL_TRANSFORM_FEEDBACK_BUFFER
buffer0
ただし、両方のバッファを読み戻し、 ofでbuffer1
インデックス付け(0,1)
し たいことを OpenGL に伝えるにはどうすればよいですか?glBindBufferBase
GL_TRANSFORM_FEEDBACK_BUFFER
私が見つけたすべてのチュートリアルでは、常にこれを単一のバッファーに単純化GL_INTERLEAVED_ATTRIBS
し、VAO 入力レイアウトに従って TF 出力を一致させるために個別のバッファーを使用するか、単にバッファー データをまったく読み戻さないことが可能であることを説明しています。
opengl - glDrawTransformFeedback がバッファに書き込まれない
トランスフォーム機能を使用してパーティクル システムを作成しようとしています。そのため、2 つのトランスフォーム バッファと 2 つの配列バッファがあり、切り替えにはピンポンを使用します。
私のシェーダーはシンプルで、ソースの位置を追加し続けるだけです。
glDrawTransformFeedback() を使用すると、2 つのバッファは変更されずに元のデータを保持します。しかし、glDrawArrays() に切り替えると、ピンポンが機能し、位置の値が増加し続けます。
初期コード
変換を実行
opengl - 複数の出力バッファをバインドする TransformFeedback
GL の TransformFeedback 機能を使用しています。単一のバッファの代わりに複数の出力バッファをバインドすることは可能ですか? 2 つの出力変数があると仮定します。
そして、それらのために 2 つのバッファ オブジェクトを生成しました。
とにバインドid0
するにはどうすればよいですか?out0
id1
out1
glBindBuffersBase
andを試しましたglBindBufferRange
が、どちらもそうではないようです。
c++ - 動的ジオメトリを使用した OpenGL トランスフォーム フィードバック
現在、ジオメトリ シェーダーでトランスフォーム フィードバックを試しています。Geometry Shader は Triangle を取り、そこから Prism を作成し、その上に Tetraeder を配置します (オベリスクのように考えてください。ただし、4 つの側面ではなく 3 つの側面しかありません)。
トランスフォーム フィードバックを 1 回使用すると、正しい結果が得られます。ただし、トランスフォーム フィードバックを使用して追加のジオメトリを作成したいと考えていました。Tetraeder の三角形ごとにジオメトリ シェーダー プロセスを実行したいと考えました。
2 番目のパスの後の結果 したがって、2 番目のパスで黒い部分が無限大になる代わりに、左右に見える別の枝がカメラに向かっているはずです。
ここで何が間違っていますか?2 つの Vertex Buffer オブジェクトの常に増加するデータ サイズを処理する方法がわかりません。おそらくそこで何か間違ったことをしているのでしょう。助けていただければ幸いです。
メイン ウィンドウ ループの前にフィードバックを変換します。
メイン ウィンドウのループ中にフィードバックを変換します。
c++ - トランスフォーム フィードバック ベースのピッキングが遅いですか?
transform feedbackを使用してピッキング ルーチンを実装しようとしています。現在は正常に動作しますが、速度が非常に遅い (より遅いGL_SELECT
) ことが問題です。
現在の仕組み:
glBindBufferRange()
オフセット (最初は 0)を使用して TBO をバインドします。glBufferSubData()
(ピッキングが正しいことを確認するために)を使用してメモリ(TFの変数構造のサイズ)をリセットします。主な問題はここにあります。- ピッキング レイとの交差をチェックするジオメトリ シェーダーでオブジェクトを描画します。交差が見つかった場合、シェーダーはこれを TF 変数に書き込みます (最初は交差がありません。手順 2 を参照してください)。
- オフセットを増やして、次のオブジェクトでステップ 1 に進みます。
最後に、各オブジェクトのピッキング データの配列を取得します。
glBufferSubData()
問題は、各反復での呼び出しを回避する方法です。可能な解決策(ただし、それらを実装する方法はわかりません)は次のとおりです。
- 変化する TF を 1 つだけ書き込みます。だから他人をリセットする必要はない
- 他の方法でデータをリセットする
何か案は?