いつものように、事前に感謝..
ピクセル ベンダーを使用して、高さマップ ベースの地形の照明効果を生成しています。地形の法線マップを作成し、そこから、特定の太陽の方向に対して各法線をドットで示したいと思います。かなり標準的なものですが、ピクセルベンダーはうまく機能していません. 私はこのコードを持っています:
void
evaluatePixel()
{
float2 pt = outCoord();
pixel3 a = sampleNearest(src,pt);
pixel3 b = sampleNearest(src,float2(pt.x + 1.0, pt.y));
pixel3 c = sampleNearest(src,float2(pt.x, pt.y + 1.0));
float3 v1 = float3(1.0, 0.0, b.r - a.r);
float3 v2 = float3(0.0, 1.0, c.r - a.r);
normalize(v1);
normalize(v2);
float3 n = cross(v1,v2);
dst = pixel3(n.x,n.y,n.z);
}
これで法線マップが生成されると思います。テストするために、光が真下を向いていると仮定しn.z
、出力色として使用しました。これにより、ソリッドカラーが生成されます。上記のコードを取得して実行すると、赤と緑に変化がある一方で、青は常に 255 でいっぱいであることがわかります。これはなぜですか? これは常にフルブルーを出力するべきではないことを考慮v1
して正規化されていると思いますか?v2
私は何を間違っていますか?!?