シェーダーを使用してレンダリングされた情報を選択するための最良の方法を見つけようとしています。ウィンドウマネージャバッファ(ウィンドウ)は、レンダリングの出力に使用されます。ユーザーイベントでは、レンダリングされたジオメトリを選択する必要があります。gluPickの使用は簡単ですが、シェーダーのみを使用して選択しようとしています。
シェーダーの柔軟性は、正しい解決策を見つけるのに役立ちません。私は次の解決策を見つけました:
- システムが提供するバッファを使用したレンダリング(実際には色を使用)。glScissorを使用して特定の領域でのレンダリングを制限し、glReadPixelsを使用して色をフェッチし、ジオメトリ識別子でマップします
- 別のフレームバッファオブジェクトを使用してレンダリングします。レンダーバッファフォーマットを定義する必要があります。たぶん、名前を付けるために単純な整数を使用できますか?
- レンダリングとピッキングの両方で、フレームバッファオブジェクトを使用してレンダリングします。レンダリングされた名前を含む追加のrenderbufferオブジェクト。
ウィンドウバッファを変更せず、ジオメトリ名を指定するカスタムの方法を定義できるため、2番目のソリューションが最適のようです。
なにか提案を?
PS:
フラグメントシェーダーでは、フラグメントデータを定義するためにvec4の配列を宣言しているので、サイズの整数の内部形式で格納されたRコンポーネントのみを持つレンダリングバッファーを保持するフレームバッファーを設定するにはどうすればよいですか?
フラグメントシェーダーの出力変数を特定のアタッチされたレンダーバッファーにリンクすることは可能ですか?