T画像のグレースケール値は時間オフセットを表します。ワイプ効果は、基本的にピクセルごとに次のように機能します。
for (timeIndex from 0 to 255)
{
for (each pixel)
{
if (timeIndex < T.valueOf[pixel])
{
compositeImage.colorOf[pixel] = A.colorOf[pixel];
}
else
{
compositeImage.colorOf[pixel] = B.colorOf[pixel];
}
}
}
説明のために、次のいくつかの値で何が起こるか想像してみてくださいtimeIndex
。
timeIndex == 0
(0%):これは移行のまさに始まりです。この時点で、Tの対応するピクセルが完全に黒である場合を除いて、合成画像のほとんどのピクセルは画像Aのピクセルになります。その場合、合成画像の画素は画像Bの画素になります。
timeIndex == 63
(25%):この時点で、画像Bのより多くのピクセルが合成画像になりました。Tの値が25%未満の白であるすべてのピクセルは、画像Bから取得され、残りは画像Aのままになります。
timeIndex == 255
(100%):この時点で、Tのすべてのピクセルが条件を無効にするため、合成画像のすべてのピクセルは画像Bのピクセルになります。
遷移を「スムーズにする」ために、次のようにすることができます。
for (timeIndex from 0 to (255 + fadeTime))
{
for (each pixel)
{
blendingRatio = edgeFunction(timeIndex, T.valueOf[pixel], fadeTime);
compositeImage.colorOf[pixel] =
(1.0 - blendingRatio) * A.colorOf[pixel] +
blendingRatio * B.colorOf[pixel];
}
}
選択はedgeFunction
あなた次第です。これは、AからBへの線形遷移を生成します。
float edgeFunction(value, threshold, duration)
{
if (value < threshold) { return 0.0; }
if (value >= (threshold + duration)) { return 1.0; }
// simple linear transition:
return (value - threshold)/duration;
}