問題タブ [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.
opengl - 変換フィードバックを伴う glBindBufferRange の使用
連続する変換フィードバックを埋めたいバッファーがあり、これをどのように正確に行うのか疑問に思っています。
glBindBufferRange
には 5 つの引数があります。最初の 3 つが の引数と同等であることは理解していますが、との引数glBindBufferBase
についていくつか質問があります。offset
size
最初のトランスフォーム フィードバックがn
から取得したプリミティブを生成した場合GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
、プリミティブはポイントであり、バッファ内のその位置から続行したい場合、 のオフセットをglBindBufferRange
に設定する必要がありn*4*sizeof(GLfloat)
ますか? (vec4 ジオメトリ シェーダー出力を取得していると仮定します)
ドキュメントには、基本的なマシン単位である必要があるoffset
と書かれsize
ていますが(GLintptrとGLsizeiptrの2つの異なるタイプがありますが)、それが何を意味するのか正確にはわかりません。
opengl - 変換フィードバックとレンダリングの両方にバッファーをバインドすることは可能ですか?
次のような変換フィードバックに関するチュートリアルを読みました。
私の質問は、上記を達成するために1つのバッファのみを使用することは可能ですか?
opengl - 変換フィードバックは最初のフレームでのみ機能します
トランスフォーム フィードバックは最初のフレームでは機能しますが、それ以降は機能しません。
これは「GLSL Cookbook」の例に基づいたパーティクル システムですが、OpenGL 3.3 に変換しています。
私のプログラムのセットアップ:
アトリビュートごとに 2 セットの頂点配列バッファーがあります (位置用に 2 つ、速度用に 2 つ、開始時間用に 2 つ)。2 つの VAO、最初の設定バッファーに対応する最初の VAO、およびバッファーの 2 番目のセットに対応する 2 番目の VAO。VAO は、頂点属性を対応するバッファーに設定します。
2 つのシェーダー プログラムがあり、1 つ目は変換フィードバックを実行し、2 つ目はレンダリングを実行します。
各フレームで、最初に変換フィードバック シェーダー プログラムと VAO を使用して変換フィードバックが実行され、次にレンダー シェーダーと他の VAO レンダリングが実行されます。連続する各フレームで、VAO が交換されます。
でクエリを使用するとGL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN
、最初にすべてのプリミティブが書き込まれ、その後、書き込まれたプリミティブの値が0
. また、画面上でポイントがちらつくのを見ることで、最初のパスが機能していることを視覚的に確認できます (ポイントの開始位置と最初のフレームで変換された位置の間でちらつきます)。
この問題は Mac OS X でのみ見られます (Linux と Windows で完全に動作します)。Mac が一部の OpenGL 機能で少し遅れていることは知っていますが、この場合に問題になることを示すものは何も見つかりません。
また、レンダリング中に OpenGL エラーをチェックしましたが、何もありませんでした。
変換フィードバック シェーダをリンクする前に:
私が使用しているレンダリング関数コードは次のとおりです。
トランスフォーム フィードバック シェーダの頂点シェーダ ( m_transformShader
):
頂点シェーダーのレンダリング:
OpenGL 3.3 コンテキストを使用しています。
ios - 変換フィードバックを使用した iOS でのリアルタイム OpenGL ES レイトレーシング\レイキャスティング?
MRI スキャンがあり、ポリゴン化せずにさまざまな角度からサーフェスをレンダリングするために、iOS の OpenGL でリアルタイム レイキャスティングを実行したいと考えています。実際、レンダリングによって生成された深度マップのみに関心があります。
アプリストアでこれの例をいくつか見たので、可能だと確信しています(例:ImageVis3d)。glTexImage3D を使用してレンダリングを実行できますか? iOS でこの機能を使用するための適切なオンライン リソースはありますか? iOS での glTexImage3D の使用を示す GitHub プロジェクトまたは同様のものがありますか?
2D または 3D テクスチャが OpenGL ES メモリに存在すると仮定すると、フラグメント シェーダを使用して同じメモリに書き込み、それを CPU にコピーせずに再レンダリングできますか? フラグメント シェーダーを使用してボリュームを変形できるスカルプト シナリオを想像しています。
c++ - OpenGL トランスフォーム フィードバックの定義は完全にシェーダー内で行われます
変換フィードバックを実行しようとしています。コア 4.4 またはレイアウト (xfb_offset=xx) 宣言子を使用して GL_ARB_enhanced_layouts 拡張を使用して、シェーダーからバッファー レイアウトを完全に指定したかったのです。これらを頂点シェーダーで宣言した後、呼び出すことができると想定しました
変換フィードバック バッファに書き込みたい潜在的な変数の数を取得します。しかし、私のopenglは「iTransformFeedbackVars」に対して0を返し続けます。プログラムをリンクする前と後に、上記のコマンドを呼び出してみました。
ここに何かが欠けていますか、それともシェーダーが書き込みたい変数を指定し、シェーダーの希望の後にコードがバッファーを作成することさえ可能ですか?
opengl - フレームバッファなしでフィードバックを変換しますか?
頂点シェーダーを使用して、レンダリングされた出力を生成せずにバッファーを処理することに興味があります。関連するスニペットは次のとおりです。
glDrawElements()
これは、呼び出しまで正常に機能し、 GL_INVALID_FRAMEBUFFER_OPERATION
. そしてglCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
戻りますGL_FRAMEBUFFER_UNDEFINED
。
これは、私の GL コンテキストにデフォルトのフレームバッファがなく、別の FBO をバインドしていないためだと思います。しかし、レンダリングされた出力は気にせず、有効GL_RASTERIZER_DISCARD_EXT
にしたので、フレームバッファは必要ないと思いました。
それで、 framebuffer なしで変換フィードバックを使用する方法はありますか、またはその内容を気にしなくても、フレームバッファを生成してバインドする必要がありますか?