問題が何であるかをよりよく示すために、この最初の投稿を完全に書き直しました。
ps v1.4 (サポートしている最新バージョン) を使用していますが、エラーが発生し続けます。
ピクセルシェーダーに渡されたものに対して、cos、dot、distance、sqrt、normalize などの任意のタイプの関数を使用するたびに発生します。
たとえば、ピクセルシェーダでポイント ライトを使用するには「normalize(LightPosition - PixelPosition)」を実行する必要がありますが、正規化するとエラーが発生します。
注意す
べき点 - pow、abs、radians などをエラーなしで使用できます。
頂点シェーダーから渡されたものに対して実行された場合にのみ、エラーが発生します。(たとえば、ローカル ピクセルシェーダー変数の sqrt をエラーなし
で取得できます) 渡された任意の変数に対して関数を実行すると、テキストの座標、色などであってもエラーが発生します。
頂点シェーダー内では、エラーなしで渡された変数に対してこれらすべての関数を実行できます。エラーが発生するのは
ピクセルシェーダーだけです。頂点からピクセルシェーダーに渡されるすべての値は正しいです。ハードウェアよりもエラーがなく、完全に照らされたシーンが得られます。
ベクトルの正規化は基本的にエラーが発生する場所であるため、独自の正規化関数を作成してみました。
私は Norm(LightPosition - PixelPosition) を呼び出し、「Norm」は次のようになります -
float3 Norm(float3 v)
{
return v / sqrt(dot(v, v));
}
技術的には、まだピクセルシェーダー内で sqrt を取得しようとしていると思われるため、まだエラーが発生します。
エラーは具体的なものではなく、C# で .fx ファイルをロードする行に「アプリケーションのエラー」と表示されているだけ
です。このような古いバージョンを使用する必要があるため、実際にはコンパイル エラーである可能性があると考えています (vs 1.1 ps 1.4)
fxc.exe を使用してデバッグすると、「命令をピクセル シェーダー命令セットにマップできません」と表示されます。