0

いつものように、事前に感謝..

ピクセル ベンダーを使用して、高さマップ ベースの地形の照明効果を生成しています。地形の法線マップを作成し、そこから、特定の太陽の方向に対して各法線をドットで示したいと思います。かなり標準的なものですが、ピクセルベンダーはうまく機能していません. 私はこのコードを持っています:

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

私は何を間違っていますか?!?

4

1 に答える 1