0

CG プログラムを GLSL プログラムに変換しようとしています。

これまでに行ったことは正しいように見えますが、GLSL シェーダーは正しくない出力を出力します。不正な動作は、一連のテスト イメージによって定義されます。

私が調査している唯一の暗い点は、f3texRECT私が翻訳した関数ですtexture。ただし、に関するドキュメントが見つかりませんf3texRECT

誰かが光を当てることができますか?

4

2 に答える 2

2

f3texRECT() は、sampler2D ではなく sampler2DRect を使用してtexture()にマップされるように見えます。これは、テクスチャ座標が正規化されていないことを意味します ([0..1] ではなく [0..textureSize-1])。"f3" プレフィックスは、結果が 3 チャンネル カラーであることを意味します。古いバージョンの GLSL には、この目的のために textureRect() 関数がありましたが、廃止されました。

于 2012-11-02T18:12:46.590 に答える
0

f3texRECT(..args..)は Cg とまったく同じですtexRECT(..args..).xyz。これは、完全に一般的なスウィズルがなかった古い HSL からの引き継ぎとして存在します。

GLSL では同等の関数はtextureであるため、そこでも使用する必要がtexture(..arg..).xyzありますが、引数はわずかに異なる場合があります。

テクスチャ呼び出しを Cg から GLSL に変換する際の主な混乱は、シャドウ テクスチャを扱うことです。Cg でのシャドウ テクスチャ ルックアップは通常のサンプラーを使用しますが、tex呼び出しには座標に余分なコンポーネントがあります。GLSL には、代わりに個別のシャドウ サンプラ タイプがあります。したがって、Cg を GLSL に変換するときは、どのテクスチャが「通常の」テクスチャで、どのテクスチャが「シャドウ」テクスチャであるかを、その使用方法に基づいて把握する必要があります。通常のルックアップとシャドウ ルックアップの両方に単一のテクスチャを使用するまれなケースでは、GLSL 用に 2 つのサンプラーに分割する必要があります。

于 2012-11-02T19:01:36.407 に答える