如何实现GLSL中从点到线段的距离?

Jac*_*ope 0 glsl

我似乎无法在这里看到我的虫子,对吗?

bool oblong (vec2 p, vec2 a, vec2 b, float r) {
 return (((b.y-a.y)*(p.x-a.x)+(b.x-a.x)*(p.y-a.y))^2/((b.x-a.x)^2+(b.y-a.y)^2)<= r);
}
Run Code Online (Sandbox Code Playgroud)

这是我的第二个GLSL计划,(我的第一个是圆圈.)感谢您的投入!

Nic*_*las 5

您没有很好地解释函数应该做什么以及您的单字符变量名称实际意味着什么.我要去猜测,ab就行段点,p是关注点.r必须与函数测试一定的距离(通常,您应该返回距离并让用户对其进行测试.如果他们想要保留它,那就是特权).

我想你的真正问题在于,C,C++或GLSL都不^是"提升到动力"运算符.

在任何情况下,此函数的正确版本如下:

float DistToLine(vec2 pt1, vec2 pt2, vec2 testPt)
{
  vec2 lineDir = pt2 - pt1;
  vec2 perpDir = vec2(lineDir.y, -lineDir.x);
  vec2 dirToPt1 = pt1 - testPt;
  return abs(dot(normalize(perpDir), dirToPt1));
}
Run Code Online (Sandbox Code Playgroud)

请注意,此代码尚未经过测试.我只是在实现给定站点上提供的解决方案.这是用矢量运算的矢量符号实现的.请注意,我很少得到X和Y分量(我只做一次得到垂直).