仅在两个颜色重叠的地方将两种颜色连接

时间:2018-05-15 13:52:49

标签: 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.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 ));

但是我似乎无法弄清楚如何将两个条加在一起,所以如果它们都包含颜色,那么最后只会产生一个输出颜色,导致圆形在这些中心两个酒吧。

将两个条加在一起的正确函数是什么,只有当它们重叠时才会返回结果?谢谢!

1 个答案:

答案 0 :(得分:2)

  

我想从它们相交的地方形成一个圆圈。

从您的代码开始,最简单的解决方案是将x轴和y轴的“平滑”触摸相乘,而不是将它们相加:

Dim sqltext as string  
sqltext = "Update tablename SET [CURRENT QUARTER] = " & chr(34) & 2017 Q2 &chr(34) & "WHERE [CURRENT QUARTER] Is Null;"  
Docmd.RunSql sqltext  

查看预览,其中float finalC = (smoothTouchXS - smoothTouchXE) * (smoothTouchYS - smoothTouchYE); 置于(smoothTouchXS - smoothTouchXE) * (smoothTouchYS - smoothTouchYE);

之上

sum versus multiply



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

(smoothTouchXS - smoothTouchXE) + (smoothTouchYS - smoothTouchYE)

rectangle


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

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));

circle