シーン内に多数の円が隣り合っています (白い円と異なる色の円)。白い丸だけぼかしたい。(私の場合、白は (1,1,1) を意味します。)
私の質問は、フラグメント シェーダーだけで白いフラグメントを選択してぼかすにはどうすればよいですか?
私はGLSLでこのようなことをしたい:
if (my_current_fragment's_color == white)
{blur current fragment;}
else
{do not blur current fragment}
(ぼかし効果が機能していますが、フラグメントの色に基づいてコードで決定を下すことができないため、シーン全体が不適切にぼかしられています。)
どうすればいいですか?上記の GLSL 言語のコードと正確に一致するものは何ですか? フラグメントの色が白かどうかを判断するにはどうすればよいですか? 皆さん、何か考えはありますか?
必要に応じて、ここに私のコードがあります:
vertexShader: [
//"#define KERNEL_SIZE 25.0",
"uniform vec2 uImageIncrement;",
"varying vec2 vUv;",
"void main() {",
"vUv = uv - ( ( KERNEL_SIZE - 1.0 ) / 2.0 ) * uImageIncrement;",
"gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
"}"
].join("\n"),
fragmentShader: [
//"#define KERNEL_SIZE 25",
"uniform float cKernel[ KERNEL_SIZE ];",
"uniform sampler2D tDiffuse;",
"uniform vec2 uImageIncrement;",
"varying vec2 vUv;",
"void main() {",
"vec2 imageCoord = vUv;",
"vec4 sum = vec4( 0.0, 0.0, 0.0, 0.0 );",
"for( int i = 0; i < KERNEL_SIZE; i ++ ) {",
"sum += texture2D( tDiffuse, imageCoord ) * cKernel[ i ];",
//THE ABOVE LINE SHOULD BE RUN FOR WHITE FRAGMENTS ONLY. BUT HOW?
"imageCoord += uImageIncrement;",
"}",
"gl_FragColor = sum;",
"}"