我试图将鼠标触控指示器显示为圆圈。
到目前为止,我能够产生垂直和水平条(作为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 ));
但是我似乎无法弄清楚如何将两个条加在一起,所以如果它们都包含颜色,那么最后只会产生一个输出颜色,导致圆形在这些中心两个酒吧。
将两个条加在一起的正确函数是什么,只有当它们重叠时才会返回结果?谢谢!
答案 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)
;
另一种可能性是计算x和y轴上“触摸”点的“平滑”偏移。然后找到最大偏移量并使用反向结果(1.0 - 偏移量)。此解决方案将形成矩形:
(smoothTouchXS - smoothTouchXE) + (smoothTouchYS - smoothTouchYE)
另一种可能性是使用到“触摸”点的距离,这将形成圈:
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));