Glsl 仅在两种颜色重叠的地方将其连接在一起

Glsl 仅在两种颜色重叠的地方将其连接在一起,glsl,Glsl,我试图将鼠标触摸指示器显示为圆形 到目前为止,我能够生产一个垂直和水平的酒吧(如x和y触摸显示器),交叉形成一个十字形。我想在它们相交的地方形成一个圆 ... float touchX = u_TouchX; float touchY = u_ResolutionX - u_TouchY; float smoothTouchXS = smoothstep( u_ResolutionY - touchX - 300.0, u_ResolutionY- touchX, gl_FragCoord

我试图将鼠标触摸指示器显示为圆形

到目前为止,我能够生产一个垂直和水平的酒吧(如x和y触摸显示器),交叉形成一个十字形。我想在它们相交的地方形成一个圆

...

float touchX = u_TouchX;
float touchY = u_ResolutionX - u_TouchY;

float smoothTouchXS = smoothstep( u_ResolutionY - touchX - 300.0, u_ResolutionY- touchX,  gl_FragCoord.y );
float smoothTouchXE = smoothstep( u_ResolutionY - touchX, u_ResolutionY - touchX + 300.0, gl_FragCoord.y );

float smoothTouchYS = smoothstep( u_ResolutionX - touchY - 300.0, u_ResolutionX- touchY,  gl_FragCoord.x );
float smoothTouchYE = smoothstep( u_ResolutionX - touchY, u_ResolutionX - touchY + 300.0, gl_FragCoord.x );

float finalC =  ( smoothTouchXS - smoothTouchXE ) + ( smoothTouchYS - smoothTouchYE ));
photo.r     += finalC;
gl_FragCoord = photo.r
这一行是错误的:

float finalC =  ( smoothTouchXS - smoothTouchXE ) + ( smoothTouchYS - smoothTouchYE ));
但我似乎不知道如何将这两条线相加,这样,如果它们都包含颜色,那么最终只会生成一个输出颜色,从而在这两条线的中心形成一个圆

将两条线相加的适当函数是什么,这样只有当它们重叠时才会返回结果?谢谢大家!

我想在它们相交的地方形成一个圆

...

float touchX = u_TouchX;
float touchY = u_ResolutionX - u_TouchY;

float smoothTouchXS = smoothstep( u_ResolutionY - touchX - 300.0, u_ResolutionY- touchX,  gl_FragCoord.y );
float smoothTouchXE = smoothstep( u_ResolutionY - touchX, u_ResolutionY - touchX + 300.0, gl_FragCoord.y );

float smoothTouchYS = smoothstep( u_ResolutionX - touchY - 300.0, u_ResolutionX- touchY,  gl_FragCoord.x );
float smoothTouchYE = smoothstep( u_ResolutionX - touchY, u_ResolutionX - touchY + 300.0, gl_FragCoord.x );

float finalC =  ( smoothTouchXS - smoothTouchXE ) + ( smoothTouchYS - smoothTouchYE ));
photo.r     += finalC;
gl_FragCoord = photo.r
从代码开始,最简单的解决方案是将x轴和y轴的“平滑”触摸相乘,而不是求和:

float finalC =  (smoothTouchXS - smoothTouchXE) * (smoothTouchYS - smoothTouchYE);
请参见预览,其中
(smoothTouchXS-smoothTouchXE)*(smoothTouchYS-smoothTouchYE)
位于
(smoothTouchXS-smoothTouchXE)+(smoothTouchYS-smoothTouchYE)
之上



另一种可能性是计算x轴和y轴上“接触”点的“平滑”偏移。然后找到最大偏移量并使用反向结果(1.0-偏移量)。此解决方案将形成一个矩形

const float max_dist = 300.0;

vec2  touch      = vec2(u_TouchX, u_ResolutionY - u_TouchY);
vec2  touch_dist = abs(touch - gl_FragCoord.xy);

vec2  smootTouch = smoothstep(0.0, max_dist, touch_dist);
float finalC     = max(0.0, 1.0-max(smootTouch.x, smootTouch.y));


另一种可能是使用到“接触”点的距离,这将形成一个

const float max_dist = 300.0;

vec2  touch      = vec2(u_TouchX, u_ResolutionY - u_TouchY);
vec2  touch_dist = abs(touch - gl_FragCoord.xy);

float smootTouch = smoothstep(0.0, max_dist, length(touch_dist));
float finalC     = max(0.0, 1.0-smootTouch);

非常感谢您!!