質問

シェーダーを使用してレンダリングされた情報を選択する最良の方法を見つけようとしています。ウィンドウ マネージャー バッファー (ウィンドウ) は、レンダリングの出力に使用されます。ユーザー イベントで、レンダリングされたジオメトリを選択する必要があります。gluPick を使用するのは簡単ですが、シェーダーのみを使用して選択しようとしています。

シェーダの柔軟性は、正しい解決策を見つけるのに役立ちません。次の解決策を見つけました。

  • システムが提供するバッファーを使用してレンダリングします (実際には色を使用します)。glScissor を使用して特定の領域でのレンダリングを制限し、glReadPixels を使用して、ジオメトリ識別子でマップされたカラーを取得します。
  • 別のフレームバッファ オブジェクトを使用してレンダリングします。レンダーバッファ形式を定義する必要があります。名前を付けるために単純な整数を使用できるでしょうか?
  • レンダリングとピッキングの両方にフレームバッファ オブジェクトを使用したレンダリング。レンダリングされた名前を含む追加の renderbuffer オブジェクト。

ウィンドウ バッファを変更せず、ジオメトリ名を指定するカスタム方法を定義できるため、2 番目の解決策が最善であると思われます。

なにか提案を?

追伸:

フラグメント シェーダーでは、フラグメント データを定義するために vec4 の配列を宣言するので、サイズ整数の内部形式で格納された R コンポーネントのみを含むレンダー バッファーを保持するフレーム バッファーをセットアップするにはどうすればよいでしょうか?

フラグメント シェーダー出力変数を特定のアタッチされたレンダー バッファーにリンクすることは可能ですか?

役に立ちましたか?

解決

私は、シェーダは多分あなたは複数のターゲットにレンダリングすることにより、最適化のいくつかのフォームなどを除いて、本当にここに任意のヘルプであり、したがって、1回のパスであなたのピッキング値とカラー値を生成することができることはないと確信しています。

あなたはラスタライズを使用して選んでやっている場合は、

、あなたは常にglReadPixels()呼び出しまたは同等で立ち往生することになるだろう、とあなたは常に、基本的な値を選ぶと、ある種のバッファにシーンを描くことになるだろう。

あなたが本当に創造的な取得と規範から分岐したい場合は、シーン内の形状の線の交点を実行するためのシェーダを使用して試みることができます。これは、特殊なシェーダ開発の良いビットを必要とする、とあなたが選ぶのLOTやっている場合を除き、それは利益を見ることは難しい(多分レイトレーサを?)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top