次の方法で共有


nrm - vs

3D ベクトルを正規化します。

構文

nrm dst, src

この場合

  • dst はデスティネーション レジスタです。
  • src はソース レジスタです。

解説 

頂点シェーダーのバージョン 1_1 2_0 2_x 2_sw 3_0 3_sw
nrm x x x x x

この命令は、概念的に次のように機能します。

squareRootOfTheSum = (src0.x*src0.x + src0.y*src0.y + src0.z*src0.z)1/2;
dest.x = src0.x * (1 / squareRootOfTheSum);
dest.y = src0.y * (1 / squareRootOfTheSum);
dest.z = src0.z * (1 / squareRootOfTheSum);
dest.w = src0.w * (1 / squareRootOfTheSum);

dest レジスタと src レジスタを同じにすることはできません。dest レジスタはテンポラリ レジスタであることが必要です。

この命令は、次の公式に基づいて線形補間を行います。

float f = src0.x*src0.x + src0.y*src0.y + src0.z*src0.z;
if (f != 0)
    f = (float)(1/sqrt(f));
else
    f = FLT_MAX;

dest.x = src0.x*f;
dest.y = src0.y*f;
dest.z = src0.z*f;
dest.w = src0.w*f;