1

ブレンディングとは関係のないものの8ビット整数インデックスとしてアルファチャネルを使用しているので、ビット値を注意深く制御したいと思います。特に、特定のアルファ値を持つ1つのFBOレンダリングされたテクスチャのすべてのピクセルが、シェーダー内の同じアルファ値を持つすべてのピクセルと一致する必要があります。経験から、浮動小数点値を同等と比較するときは注意する必要があります...

浮動小数点vec4を使用して色の値を設定しても問題は発生しない可能性があります。私の理解では、半精度の16ビット浮動小数点でもすべての8ビット整数(0〜255)値を区別できます。ただし、フラグメントシェーダーで整数演算を実行したいので、値を確認します。

フラグメントシェーダーで整数演算を実行すると、パフォーマンスが低下する可能性がありますか?

出力はどのようにスケーリングされますか?フラグメントのカラー出力として整数ベクトルを送信することが有効であるとどこかで読みました。しかし、それはどのようにスケーリングされますか?整数0〜255のuvec4を送信した場合、それは適切にスケーリングされますか?整数値をピクセル形式に直接書き込むようにしたいのですが、整数形式の場合はスケーリングを行わないようにします。おそらく、RGBA8が255を超えるint値を送信すると、255にクランプされ、負のintがゼロにクランプされます。

この問題は、レンダリングされた画像を取得して注意深く調べないとカラー値を印刷してデバッグできないため、困難になります。何かが合わない場合は、明るい色を描くことができるかもしれません。

これが私がこのトピックで見つけた関連するスレッドです。それは以前よりも私を混乱させました。

4

1 に答える 1

1

カラーアタッチメントのアルファチャネルを使用するのではなく、明示的な整数形式の追加のレンダリングターゲットを使用することをお勧めします。これは、少なくともOpenGL-3.1(この回答のために私が見た中で最も古い仕様)以降で利用可能です。フラグメントシェーダー変数glBindFragDataLocationをバインドするOpenGL関数を参照してください。outあなたの場合int out $VARIABLENAME。次の状態への入力には、整数サンプラーを使用します。詳細については、OpenGL-3.1およびGLSL-1.30の仕様を参照してください。

于 2012-01-14T18:30:37.337 に答える