フレームシェーダオブジェクトにテクスチャ(myTexture)を付けることで、フラグメントシェーダでのぼかし操作を実行しようとしています。それは、このコードで動作します:浮動小数点値を持つフラグメントシェーダのぼかし操作
vec3 blur(float depth){
float dx = 1.0f/800;
float dy = 1.0f/800;
vec3 sum = vec3(0,0,0);
int dep=depth*10;
for(int i=-dep;i<dep;i++)
for(int j=-dep;j<dep;j++)
sum += texture(myTexture, otex + vec2(i * dx, j * dy)).xyz;
return sum/40;
}
しかし、私は以下のコードにそれを変更した場合、それは動作does notの(画面が何らかの理由で白になり、私の深さのテクスチャからその読み取りかもしれませんが、私はなぜ知りません)
vec3 blur(float depth){
float dx = 1.0f/800;
float dy = 1.0f/800;
vec3 sum = vec3(0,0,0);
float dep=depth*10;
for(float i=dep;i<dep;i+=0.2f)
for(float j=dep;j<dep;j+=0.2f)
sum += texture(myTexture, otex + vec2(i * dx, j * dy)).xyz;
return sum/40;
}
私がオブジェクトの奥行き値に応じてぼかしたいので、これを行う理由です。オブジェクトが遠い場合は、より多くのをぼかします。それは近くにある場合は、以下をぼかします。 最初のコードを使用すると、階段状のぼかしが得られます。つまり、深度が0.3の場合は3回、深度が0.2の場合は2回....... 浮動小数点値を使用して、ぼかし値の代わりに、ステップ値
間のスムーズな移行は、私が間違って何をしているのですか?また、ぼかし値の間のスムーズな移行を得るために他の方法があります。
ありがとうございました。